为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

偶然的你 2022-06-22 19:02:25
我有一个columnA整数值介于 -3 和 89 之间的 DataFrame。我想选择所有值在columnA离散的 10 个单元箱之间的行,例如-10 到 00 到 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 中的所有行?
查看完整描述

2 回答

?
慕侠2389804

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])])


查看完整回答
反对 回复 2022-06-22
?
一只斗牛犬

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


查看完整回答
反对 回复 2022-06-22
  • 2 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信