有没有办法将数据帧的行分组而不是某个列的值,而是通过将某个函数应用于该列的值的结果?例如,根据某列的值是否> 1来对数据帧的行进行分组。 0或≤0。
当然,我意识到总是可以创建一个辅助列来保存变换的结果,并使用这个辅助列作为groupby
的参数。我的问题是,是否有办法在不需要创建辅助列的情况下执行相同的操作。
答案 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