我有一个运行的DataFrame:
df.groupby(by="mycol").agg({"colA": "sum", "colB": "count"})
但是,colA
和colB
需要存在。从聚合创建新列的最“熊猫”方法是什么?
编辑:
基本上,我有一组列,我的聚合不是1:1映射。因此,请考虑一个示例,我希望将两列值的比率聚合为新列。现在想一下这种映射的字典。
我知道,在示例中,我只能过滤play
,然后计算分组数据的均值。但这不是问题的重点,所以请忽略这个简单的解决方案,这只是简单例子的副作用。
>> df
outlook play temperature
0 sunny True 25
1 sunny True 25
2 overcast True 19
3 rain False 21
4 overcast False 33
5 rain False 27
6 rain False 22
7 overcast True 26
8 sunny True 13
9 sunny True 16
# should become:
>> df.groupby(by="outlook").agg(?)
play_mean_temp
sunny 19.75
overcast 22.50
rain NaN
答案 0 :(得分:1)
在您的样本中,您可以使用:
print (df.groupby(by="outlook").apply(lambda x: x.ix[x.play, 'temperature'].mean()))
outlook
overcast 22.50
rain NaN
sunny 19.75
如果首先使用布尔索引,则省略某些行:
print (df[df.play].groupby(by="outlook")['temperature'].mean())
outlook
overcast 22.50
sunny 19.75
Name: temperature, dtype: float64