如何通过列的某些变换对数据帧进行分组

时间:2015-10-20 22:46:53

标签: python pandas

有没有办法将数据帧的行分组而不是某个列的值,而是通过将某个函数应用于该列的值的结果?例如,根据某列的值是否> 1来对数据帧的行进行分组。 0或≤0。

当然,我意识到总是可以创建一个辅助列来保存变换的结果,并使用这个辅助列作为groupby的参数。我的问题是,是否有办法在不需要创建辅助列的情况下执行相同的操作。

1 个答案:

答案 0 :(得分:3)

您提供的示例非常简单:

import numpy
import pandas

numpy.random.seed(0)
N = 15
df = pandas.DataFrame({
    'A': numpy.arange(N),
    'B': numpy.round(numpy.random.normal(size=N), 2)
})

print(df.to_string())


     A     B
0    0  1.76
1    1  0.40
2    2  0.98
3    3  2.24
4    4  1.87
5    5 -0.98
6    6  0.95
7    7 -0.15
8    8 -0.10
9    9  0.41
10  10  0.14
11  11  1.45
12  12  0.76
13  13  0.12
14  14  0.44

那么我可以通过比较A列到10来进行分组:

df.groupby(by=df['A'] < 10).sum()

        A     B
A              
False  60  2.91
True   45  7.38

by语句可能更复杂(即返回任意数量的值):

classifier = {0: 'old', 1: 'busted', 2: 'hotness'}
df.groupby(by=(df['A'] % 3).map(classifier)).sum()

          A     B
A          
old      30  6.12
busted   35  2.38
hotness  40  1.79