首页 > 解决方案 > 基于另一列对值进行分组并将这些值相加

问题描述

我目前正在对模拟 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 中记录的每次购买的平均价格)并不是我想要的,因为某些用户已经购买了文件中的多个项目。我正在寻找一种解决方案,让我从我的测试框架中提取每个用户的平均花费,按性别分开和分组。

标签: pythonpandaspandas-groupby

解决方案


要获得人均花费,首先需要找到用户名的平均值。

然后要获得每个用户每个性别的平均花费,再做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']]

推荐阅读