熊猫分组多个列根据条件取另一列的平均值

时间:2020-03-25 18:50:42

标签: python pandas pandas-groupby transform

我被困在这个位置上,类似的帖子为我造成了一个黑洞。我还在学习。.

我想表示满足条件的组的平均值。我的数据如下:

user          date           Flag    Value  
0    ron  12/23/2016        'flag'    10     
1    ron  12/21/2016        'n/a'     25     
2    ron   12/23/2016       'flag'    10     
3    ron  12/21/2016        'n/a'     3      
4   andy   12/22/2016       'flag'    5      
5   andy   12/22/2016       'flag'    1      

我想按用户+ Flag分组,并创建一个新列'Avg',该列仅采用'flag'的平均值。因此数据看起来像这样:

user          date           Flag    Value  Avg
0    ron  12/23/2016        'flag'    10     10
1    ron  12/21/2016        'n/a'     25     10
2    ron   12/23/2016       'flag'    10     10
3    ron  12/21/2016        'n/a'     3      10
4   andy   12/22/2016       'flag'    5      3
5   andy   12/22/2016       'flag'    1      3

我有类似的东西,但是尝试了许多不同的变化:

groups = sample.groupby(['user','Flag'])
flag = sample.groupby(['user','Flag'])['Value'].transform('mean')
sample.loc[:,'Avg'] = np.select([flag.eq('flag'), groups.transform('mean')])

感谢指导。

1 个答案:

答案 0 :(得分:1)

这是groupbymap的解决方案:

df['Avg'] = df['user'].map(df[df['Flag']=="'flag'"]            # use "flag" only if you don't have `'` in the data'
                             .groupby('user')['Value'].mean())

输出:

   user        date    Flag  Value  Avg
0   ron  12/23/2016  'flag'     10   10
1   ron  12/21/2016   'n/a'     25   10
2   ron  12/23/2016  'flag'     10   10
3   ron  12/21/2016   'n/a'      3   10
4  andy  12/22/2016  'flag'      5    3
5  andy  12/22/2016  'flag'      1    3