2 回答
TA贡献1719条经验 获得超6个赞
这个怎么样?我假设您的垃圾箱的形式为 [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):
df_sorted = df.sort_values(col, ascending=True)
bins = np.arange(xmin, xmax, Nbins)
if N > Nbins-1:
return(pd.DataFrame())
return(df_sorted[(df_sorted[col] >= bins[N]) & (df_sorted[col]<bins[N+1])])
TA贡献1784条经验 获得超2个赞
使用DataFrame.groupby+ Series.cumsum:
def get_bin(n):
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)
a b c d
0 0 1 1 x
1 0 1 5 y
2 0 1 5 x
3 0 1 0 y
4 1 1 5 x
5 0 1 4 y
6 1 0 1 x
7 1 1 3 y
8 0 1 2 x
9 0 0 0 y
groups=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))
a b c d
0 0 1 1 x
1 0 1 5 y
添加回答
举报