我目前正在对模拟 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
我目前的目标是找到每个性别作为一个整体的平均花费金额。我想象如何通过创建一种检查男性的方法来实现这一点/female/other 标签位于用户名前面,然后将该人的平均支出添加到运行总计中,然后我可以稍后对其进行操作。不幸的是,我对 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()
不返回一个 - 组标签不显示为列,而是显示为行索引。但你可以用这种方式来做:(注意 groupby()
的 as_index
参数)
mean = purchase_data.groupby(['Gender', "SN"], as_index=False).mean()
gender = mean.groupby(['Gender'], as_index=False).mean()
那么你想要的可能是gender[['Gender','Price']]
关于python - 根据另一列对值进行分组并将这些值相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52331326/