【问题标题】:Counting culmulative occurences over time with a two-level groupby使用两级 groupby 计算一段时间内的累积事件
【发布时间】:2021-05-19 22:34:58
【问题描述】:

我有一个如下所示的数据集:

    country            date_added
0   United States       01/2013
1   United Kingdom      03/2014
2   Egypt               03/2014
3   United States       03/2014
4   United States       03/2014
5   United Kingdom      06/2015
6   United States       06/2015

我想按日期计算每个国家/地区的累计总数,即:

    date_added         country         cumulative_count
0   01/2013             United States          1
1   03/2014             United Kingdom         1
2   03/2014             Egypt                  1
3   03/2014             United States          2
4   06/2015             United Kingdom         2
5   06/2015             United States          4

我尝试了grouping by two levels,但 .count() 不起作用(计数根本不显示)而 .size() 起作用:

cumulative_by_date = new_df.groupby(['date_added','country']).size()

我不知道如何将this question's solution 与 .size() 一起应用以获得累积总和。

【问题讨论】:

  • 不幸的是,它没有,因为 .size() 是按时间段而不是 .count() 给我的总计数。为清楚起见,更新了问题并进行了编辑。
  • new_df.groupby(['date_added', 'country']).size().groupby(level=1).cumsum().reset_index(name='cumulative_count')'
  • 谢谢,这确实有效。第二个 groupby(即 groupby(level=1))是做什么的?我认为这两个级别都将分组在第一个 .groupby()
  • 我认为第二个链接问题中的解释/演练很有帮助。
  • 美国 3/24 的计数看起来不正确。它应该是 2 而不是 3

标签: python pandas count pandas-groupby cumulative-sum


【解决方案1】:

按照第二个链接问题的方法,这里有一个双 groupbycumsumreset_index

df.groupby(['date_added', 'country']).size()
  .groupby(['country']).cumsum().reset_index(name='cumulative_count')

输出:

  date_added         country  cumulative_count
0    01/2013   United States                 1
1    03/2014           Egypt                 1
2    03/2014  United Kingdom                 1
3    03/2014   United States                 3
4    06/2015  United Kingdom                 2
5    06/2015   United States                 4

分步:

# size by date and country
print(df.groupby(['date_added', 'country']).size())

# output
date_added  country       
01/2013     United States     1
03/2014     Egypt             1
            United Kingdom    1
            United States     2
06/2015     United Kingdom    1
            United States     1
# cumulative sum by country
print(df.groupby(['date_added', 'country']).size()
        .groupby(['country']).cumsum())

# output
date_added  country       
01/2013     United States     1
03/2014     Egypt             1
            United Kingdom    1
            United States     3
06/2015     United Kingdom    2
            United States     4
# reset index
print(df.groupby(['date_added', 'country']).size()
        .groupby(['country']).cumsum().reset_index(name='cumulative_count'))

# output
  date_added         country  cumulative_count
0    01/2013   United States                 1
1    03/2014           Egypt                 1
2    03/2014  United Kingdom                 1
3    03/2014   United States                 3
4    06/2015  United Kingdom                 2
5    06/2015   United States                 4

【讨论】:

  • 带我们了解正在发生的事情
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 2020-11-23
  • 1970-01-01
相关资源
最近更新 更多