我被困在这个位置上,类似的帖子为我造成了一个黑洞。我还在学习。.
我想表示满足条件的组的平均值。我的数据如下:
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')])
感谢指导。
答案 0 :(得分:1)
这是groupby
和map
的解决方案:
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