从 Pandas 数据框中另一个系列分段的日期累积计数创建增量计数

Posted

技术标签:

【中文标题】从 Pandas 数据框中另一个系列分段的日期累积计数创建增量计数【英文标题】:Create an incremental count from a cumulative count by date segmented by another series in a Pandas data frame 【发布时间】:2021-01-15 04:47:06 【问题描述】:

我在一个日期框架 ('df1') 中有累积数据(系列'cumulative_count'),该数据框架由系列“状态”分段,我想在数据框架中创建一个新系列,显示增量计数“状态”。

所以:

df1 = pd.DataFrame('date': ['2020-01-03','2020-01-03','2020-01-03','2020-01-04','2020-01-04','2020-01-04','2020-01-05','2020-01-05','2020-01-05'],'state': ['NJ','NY','CT','NJ','NY','CT','NJ','NY','CT'], 'cumulative_count': [1,3,5,3,6,7,19,15,20])

...转换为添加新系列(“增量计数”),其中增量计数按日期计算,但也按状态分段,生成的结果为...

df2 = pd.DataFrame('date': ['2020-01-03','2020-01-03','2020-01-03','2020-01-04','2020-01-04','2020-01-04','2020-01-05','2020-01-05','2020-01-05'],'state': ['NJ','NY','CT','NJ','NY','CT','NJ','NY','CT'], 'cumulative_count': [1,3,5,3,6,7,19,15,20],'incremental_count': [1,3,5,2,3,2,16,9,13])

任何有关如何执行此操作的建议将不胜感激。谢谢!

【问题讨论】:

【参考方案1】:

由于您的 DataFrame 已按 'date' 排序,因此您希望在每个状态组中使用 diff。然后fillna 获取每个州内第一个日期的正确值。

df1['incremental_count'] = (df1.groupby('state')['cumulative_count'].diff()
                               .fillna(df1['cumulative_count'], downcast='infer'))

         date state  cumulative_count  incremental_count
0  2020-01-03    NJ                 1                  1
1  2020-01-03    NY                 3                  3
2  2020-01-03    CT                 5                  5
3  2020-01-04    NJ                 3                  2
4  2020-01-04    NY                 6                  3
5  2020-01-04    CT                 7                  2
6  2020-01-05    NJ                19                 16
7  2020-01-05    NY                15                  9
8  2020-01-05    CT                20                 13

【讨论】:

以上是关于从 Pandas 数据框中另一个系列分段的日期累积计数创建增量计数的主要内容,如果未能解决你的问题,请参考以下文章

将语料库中的名称部分匹配到 Pandas 数据框中另一列中的名称

如何计算包含一组列中的值和 Pandas 数据框中另一列中的另一个值的行数?

从pandas DataFrame中另一列中的位置给定的字符串列中提取字符[重复]

根据 Pandas 中另一列中的索引从列中获取数据

日期时间范围之间的 Python Pandas 累积列

将 JSON 时间戳字符串转换为 pandas 数据框中的 python 日期