如何使用pandas groupby& amp;生成新列聚集?

时间:2016-08-12 11:06:39

标签: pandas dataframe

我有一个运行的DataFrame:

df.groupby(by="mycol").agg({"colA": "sum", "colB": "count"})

但是,colAcolB需要存在。从聚合创建新列的最“熊猫”方法是什么?

编辑:

基本上,我有一组列,我的聚合不是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

1 个答案:

答案 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