Python - 遍历离散箱列表并选择行

我有一个columnA整数值介于 -3 和 89 之间的 DataFrame。我想选择所有值在columnA离散的 10 个单元箱之间的行,例如

-10 到 0
0 到 10 ...
80 到 90

我可以像这样生成每个 bin 中的行数列表:

pd.cut(DataFrame['columnA'], np.arange(-10, 100, 10), include_lowest=True, labels=False).value_counts().sort_index().to_list()

产生这样的列表:

[505, 25000, 21, 393, 79232, 953000, 24121, 662, 50, 900]

现在,如果我想检查第一个 bin 中的所有行,我可以像这样选择它们:

DataFrame.sort_values('columnA', ascending=True).iloc[0:505]

如何编写一个函数来选择 bin N 中的所有行?


偶然的你
浏览 160回答 2
2回答

慕侠2389804

这个怎么样?我假设您的垃圾箱的形式为 [a, b[ (在下限关闭并在上限打开。df = pd.DataFrame(map(lambda x: int(x), (np.random.uniform(-3,89,1000))), columns=['ColumnA'])def bin_func(df, N, col='ColumnA', xmin=-10, xmax=100, Nbins=10):&nbsp;&nbsp; &nbsp; df_sorted = df.sort_values(col, ascending=True)&nbsp;&nbsp; &nbsp; bins = np.arange(xmin, xmax, Nbins)&nbsp; &nbsp; if N > Nbins-1:&nbsp; &nbsp; &nbsp; &nbsp; return(pd.DataFrame())&nbsp; &nbsp; return(df_sorted[(df_sorted[col] >= bins[N]) & (df_sorted[col]<bins[N+1])])

一只斗牛犬

使用DataFrame.groupby+ Series.cumsum:def get_bin(n):&nbsp; &nbsp; &nbsp;return df.groupby(df.index.isin([505, 25000, 21, 393, 79232, 953000, 24121, 662, 50, 900]).cumsum()).get_group(n)这会将您的数据框分为称为 0,1,2,3,4,5 ... n 的组。您选择使用groupby.get_group。这是一个例子:print(df)&nbsp; &nbsp;a&nbsp; b&nbsp; c&nbsp; d0&nbsp; 0&nbsp; 1&nbsp; 1&nbsp; x1&nbsp; 0&nbsp; 1&nbsp; 5&nbsp; y2&nbsp; 0&nbsp; 1&nbsp; 5&nbsp; x3&nbsp; 0&nbsp; 1&nbsp; 0&nbsp; y4&nbsp; 1&nbsp; 1&nbsp; 5&nbsp; x5&nbsp; 0&nbsp; 1&nbsp; 4&nbsp; y6&nbsp; 1&nbsp; 0&nbsp; 1&nbsp; x7&nbsp; 1&nbsp; 1&nbsp; 3&nbsp; y8&nbsp; 0&nbsp; 1&nbsp; 2&nbsp; x9&nbsp; 0&nbsp; 0&nbsp; 0&nbsp; ygroups=df.index.isin([2,4,7,9]).cumsum()print(groups)#array([0, 0, 1, 1, 2, 2, 2, 3, 3, 4])print(df.groupby(groups).get_group(0))&nbsp; &nbsp;a&nbsp; b&nbsp; c&nbsp; d0&nbsp; 0&nbsp; 1&nbsp; 1&nbsp; x1&nbsp; 0&nbsp; 1&nbsp; 5&nbsp; y
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python