我有一个包含一系列日期的数据框、每天的活跃用户以及该用户当天的事件。我想添加一列,在另一列中提供每个用户在总时间跨度内的事件总数。
我可以让它与这段代码一起工作,但我确信有一种更优雅的方法来做到这一点。请告诉我还有什么可以更好的!
df1 = pd.DataFrame({'users': ['Sara', 'James', 'Sara', 'James'],
'events': [3, 2, 5, 1]
})
df2 = df1.groupby('users').sum()
df2.rename(columns= {'events' : 'total'}, inplace=True)
df3 = pd.merge(df1, df2, how='left', on='users')
这给了我想要的输出,每个 Sara 行有 8 个,每个 James 行有 3 个。
最佳答案
确实有,你知道transform
方法吗?它返回一个与当前数据帧格式相同的 groupby
df1['total'] = df1.groupby('users').transform('sum')
print(df1)
users events total
0 Sara 3 8
1 James 2 3
2 Sara 5 8
3 James 1 3
只是作为一个测试
df1 == df3
users events total
0 True True True
1 True True True
2 True True True
3 True True True
更多信息:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.transform.html
关于python - 如何向 df 添加一列以对 A 列中条目的所有匹配值求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58073200/