gpt4 book ai didi

python - PANDAS 中的累积集

转载 作者:太空宇宙 更新时间:2023-11-03 14:09:46 25 4
gpt4 key购买 nike

我有一个推文数据框,我希望按日期对数据框进行分组并生成一个列,其中包含截至该日期已发布的所有唯一用户的累积列表。现有功能(例如 cumsum)似乎都不适用于此。这是原始推文数据框的示例,其中索引 (created_at) 采用日期时间格式:

In [3]: df
Out[3]:
screen_name
created_at
04-01-16 Bob
04-01-16 Bob
04-01-16 Sally
04-01-16 Sally
04-02-16 Bob
04-02-16 Miguel
04-02-16 Tim

我可以按日期折叠数据集并获得包含每天唯一用户的列:

In [4]: df[['screen_name']].groupby(df.index.date).aggregate(lambda x: set(list(x)))

Out[4]: from_user_screen_name
2016-04-02 {Bob, Sally}
2016-04-03 {Bob, Miguel, Tim}

到目前为止一切顺利。但我想要的是有一个像这样的“累积集”:

Out[4]:             Cumulative_list_up_to_this_date   Cumulative_number_of_unique_users
2016-04-02 {Bob, Sally} 2
2016-04-03 {Bob, Sally, Miguel, Tim} 4

最终,我真正感兴趣的是最后一列中的累积数字,因此我可以绘制它。我考虑过循环日期和其他事情,但似乎找不到好的方法。在此先感谢您的帮助。

最佳答案

对于最新版本的 Pandas,这不再有效并导致以下错误:NotImplementedError: function is not implemented for this dtype: [how->cumsum,dtype->object]

您不能添加集合,但可以添加列表!因此,构建一个用户列表,然后计算累加总和,最后应用集合构造函数去除重复项。

cum_names = (df['screen_name'].groupby(df.index.date)
.agg(lambda x: list(x))
.cumsum()
.apply(set))
# 2016-04-01 {Bob, Sally}
# 2016-04-02 {Bob, Miguel, Tim, Sally}
# dtype: object

cum_count = cum_names.apply(len)
# 2016-04-01 2
# 2016-04-02 4
# dtype: int64

关于python - PANDAS 中的累积集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39622487/

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