Pandas Groupby 值范围
Posted
技术标签:
【中文标题】Pandas Groupby 值范围【英文标题】:Pandas Groupby Range of Values 【发布时间】:2014-02-21 20:33:49 【问题描述】:pandas 中是否有一种简单的方法可以在一系列值增量上调用groupby
?例如,在下面的示例中,我可以使用 0.155
增量对列 B
进行分组和分组,例如,B
列中的前几个组被划分为 '0 - 0.155, 0.155 - 0.31 之间的范围。 ..`
import numpy as np
import pandas as pd
df=pd.DataFrame('A':np.random.random(20),'B':np.random.random(20))
A B
0 0.383493 0.250785
1 0.572949 0.139555
2 0.652391 0.401983
3 0.214145 0.696935
4 0.848551 0.516692
或者,我可以先按这些增量将数据分类到一个新列中,然后使用groupby
来确定可能适用于列A
的任何相关统计信息?
【问题讨论】:
【参考方案1】:试试这个:
df = df.sort_values('B')
bins = np.arange(0, 1.0, 0.155)
ind = np.digitize(df['B'], bins)
print df.groupby(ind).head()
当然,您可以在组上使用任何功能,而不仅仅是head
。
【讨论】:
【参考方案2】:你可能对pd.cut
感兴趣:
>>> df.groupby(pd.cut(df["B"], np.arange(0, 1.0+0.155, 0.155))).sum()
A B
B
(0, 0.155] 2.775458 0.246394
(0.155, 0.31] 1.123989 0.471618
(0.31, 0.465] 2.051814 1.882763
(0.465, 0.62] 2.277960 1.528492
(0.62, 0.775] 1.577419 2.810723
(0.775, 0.93] 0.535100 1.694955
(0.93, 1.085] NaN NaN
[7 rows x 2 columns]
【讨论】:
我可以为多个维度执行此操作吗?基本上同时按两个值分组? 我必须使用 2 列进行分组。第一列是一个字符串,我必须对具有相同名称的行进行分组。在这些组中,我不得不根据第二列中的值范围对它们进行进一步分组。我是这样做的:(qa_scores_data.groupby(['Video Name', pandas.cut(qa_scores_data['Frame Name'].astype('float'), [0.5, 12.5, 24.5, 36.5, 48.5])])).mean()
我会收到这个错误:ValueError: Length of grouper (9235) and axis (8769) must be same length
B的第一个范围是(0, 0.155),而B的第一行是0.246394 > 0.155,我想0.246394应该落入第二个范围(0.155, 0.31]。不是吗?以上是关于Pandas Groupby 值范围的主要内容,如果未能解决你的问题,请参考以下文章
pandas使用groupby.first函数groupby.nth函数获取每个组中的第一个值实战:groupby.first函数和groupby.nth函数对比(对待NaN的差异)
pandas使用groupby.last函数获取每个组中的最后一个值实战:groupby.last函数获取每个组中的最后一个值groupby.nth函数获取每个组中的最后一个值