gpt4 book ai didi

python - 如何通过多列中的唯一索引在 Pandas 中求和?

转载 作者:太空狗 更新时间:2023-10-29 21:31:00 25 4
gpt4 key购买 nike

我有一个 pandas DataFrame,它详细说明了用户 session 期间“点击”方面的在线事件。有多达 50,000 个独立用户,数据框有大约 150 万个样本。显然大多数用户都有多个记录。

四列分别是唯一的用户id、用户开始服务的日期“Registration”、用户使用服务的日期“Session”、总点击次数。

DataFrame的组织结构如下:

User_ID    Registration  Session      clicks
2349876 2012-02-22 2014-04-24 2
1987293 2011-02-01 2013-05-03 1
2234214 2012-07-22 2014-01-22 7
9874452 2010-12-22 2014-08-22 2
...

(上面还有一个从0开始的索引,但是可以设置User_ID作为索引。)

我想汇总自注册日期以来用户的总点击次数。数据框(或 pandas Series 对象)将列出 User_ID 和“Total_Number_Clicks”。

User_ID    Total_Clicks
2349876 722
1987293 341
2234214 220
9874452 1405
...

如何在 Pandas 中做到这一点?这是由 .agg() 完成的吗?每个 User_ID 都需要单独求和。

由于有 150 万条记录,是否可以扩展?

最佳答案

您可以使用 IIUC groupby , sumreset_index :

print df
User_ID Registration Session clicks
0 2349876 2012-02-22 2014-04-24 2
1 1987293 2011-02-01 2013-05-03 1
2 2234214 2012-07-22 2014-01-22 7
3 9874452 2010-12-22 2014-08-22 2

print df.groupby('User_ID')['clicks'].sum().reset_index()
User_ID clicks
0 1987293 1
1 2234214 7
2 2349876 2
3 9874452 2

如果第一列 User_IDindex:

print df
Registration Session clicks
User_ID
2349876 2012-02-22 2014-04-24 2
1987293 2011-02-01 2013-05-03 1
2234214 2012-07-22 2014-01-22 7
9874452 2010-12-22 2014-08-22 2

print df.groupby(level=0)['clicks'].sum().reset_index()
User_ID clicks
0 1987293 1
1 2234214 7
2 2349876 2
3 9874452 2

或者:

print df.groupby(df.index)['clicks'].sum().reset_index()
User_ID clicks
0 1987293 1
1 2234214 7
2 2349876 2
3 9874452 2

编辑:

作为Alexander指出,如果 Session 日期小于每个 User_IDRegistration 日期,则需要在 groupby 之前过滤数据:

print df
User_ID Registration Session clicks
0 2349876 2012-02-22 2014-04-24 2
1 1987293 2011-02-01 2013-05-03 1
2 2234214 2012-07-22 2014-01-22 7
3 9874452 2010-12-22 2014-08-22 2

print df[df.Session >= df.Registration].groupby('User_ID')['clicks'].sum().reset_index()
User_ID clicks
0 1987293 1
1 2234214 7
2 2349876 2
3 9874452 2

我更改了 3. 行数据以获得更好的样本:

print df
Registration Session clicks
User_ID
2349876 2012-02-22 2014-04-24 2
1987293 2011-02-01 2013-05-03 1
2234214 2012-07-22 2012-01-22 7
9874452 2010-12-22 2014-08-22 2

print df.Session >= df.Registration
User_ID
2349876 True
1987293 True
2234214 False
9874452 True
dtype: bool

print df[df.Session >= df.Registration]
Registration Session clicks
User_ID
2349876 2012-02-22 2014-04-24 2
1987293 2011-02-01 2013-05-03 1
9874452 2010-12-22 2014-08-22 2

df1 = df[df.Session >= df.Registration]
print df1.groupby(df1.index)['clicks'].sum().reset_index()
User_ID clicks
0 1987293 1
1 2349876 2
2 9874452 2

关于python - 如何通过多列中的唯一索引在 Pandas 中求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35307732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com