python - 基于另一列对值进行分组并将这些值相加
问题描述
我目前正在对模拟 MMORPG 的微交易数据进行模拟分析。这是 CSV 文件的几行示例:
PID Username Age Gender ItemID Item Name Price
0 Jack78 20 Male 108 Spikelord 3.53
1 Aisovyak 40 Male 143 Blood Scimitar 1.56
2 Glue42 24 Male 92 Final Critic 4.88
这就是事情变得冒险的地方——我成功地使用了 groupby 函数来获得一个结果,其中购买按买家的性别分组。
test = purchase_data.groupby(['Gender', "Username"])["Price"].mean().reset_index()
让我得到结果(为了便于阅读而截断)
Gender Username Price
0 Female Adastirin33 $4.48
1 Female Aerithllora36 $4.32
2 Female Aethedru70 $3.54
...
29 Female Heudai45 $3.47
.. ... ... ...
546 Male Yadanu52 $2.38
547 Male Yadaphos40 $2.68
548 Male Yalae81 $3.34
我目前的目标是找出每个性别作为一个整体花费的平均金额。我想如何做到这一点是通过创建一个方法来检查用户名前面的男性/女性/其他标签,然后将该人的平均花费添加到运行总数中,然后我可以稍后对其进行操作。不幸的是,我对 Python 很陌生——我什至不知道从哪里开始,或者我是否走在正确的轨道上。
附录:jezrael 误解了这个问题的意图。虽然他为我提供了一种清理我的输出系列的方法,但他没有为我提供方法,甚至没有暗示我的主要目标,即按性别将花费的钱组合在一起(除了我的第一个片段之外,所有都显示了女性) ,但是在 csv 文件的下方还有男性,我不想用太多的意大利面堵塞页面)并将它们放在一个变量中。
附录2:jezrael建议的另一种解决方案,
purchase_data.groupby(['Gender'])["Price"].sum().reset_index()
创建
Gender Price
0 Female $361.94
1 Male $1,967.64
2 Other / Non-Disclosed $50.19
可悲的是,使用这个新系列中的数据(这将产生此 csv 中记录的每次购买的平均价格)并不是我想要的,因为某些用户已经购买了文件中的多个项目。我正在寻找一种解决方案,让我从我的测试框架中提取每个用户的平均花费,按性别分开和分组。
解决方案
要获得人均花费,首先需要找到用户名的平均值。
然后要获得每个用户每个性别的平均花费,再做groupby
一次:
df1 = df.groupby(by=['Gender', 'Username']).mean().groupby(by='Gender').mean()
df1['Gender'] = df1.index
df1.reset_index(drop=True, inplace=True)
df1[['Gender', 'Price']]
推荐阅读
- java - 无法在 iText 核心 java 中生成报告
- mongodb - 如何在 Robo 3T (Robomongo) 中导出连接
- django - 在 Django Rest Framework GenericViews 上缓存
- laravel - How to add multiple form values using vuejs?
- python - 如果不满足规则,则写入日志文件
- assembly - x86 反汇编,涉及模块化散列
- c# - C# Web Api 异步调用
- javascript - 如何在 Vue-html-to-paper 中隐藏元素?
- sql - 关于从两列中获取具有最大日期的记录的 SQL 查询
- r - 在 R 中交叉验证具有不同大小的单个隐藏层的多个神经网络