python - Pandas GroupBy 和 CumSum 在列上
问题描述
我有一个如下所示的数据集
doc_created_month doc_created_year speciality doc_id count
8 2016 Acupuncturist 1
2 2017 Acupuncturist 1
4 2017 Acupuncturist 1
4 2017 Allergist 1
5 2018 Allergist 1
10 2018 Allergist 2
我想按月、年和专业分组,并在“doc_id count”列上获得累积总和。
这些是我尝试过的以下内容:
1) docProfileDf2.groupby(by=['speciality','doc_created_year','doc_created_month']).sum().groupby(level=[0]).cumsum()
2) docProfileDf2.groupby(['doc_created_month','doc_created_year','speciality'])['doc_id count'].apply(lambda x: x.cumsum())
他们都没有返回正确的累积总和。任何解决方案都可以提供帮助。
预期的输出应该是:
doc_created_month doc_created_year speciality doc_id count
8 2016 Acupuncturist 1
2 2017 Acupuncturist 2
4 2017 Acupuncturist 3
4 2017 Allergist 1
5 2018 Allergist 2
10 2018 Allergist 4
对于每年,每月和专业,我想要'doc_id count'的cumsum
解决方案
请注意,我
doc_id count
改为doc_id_count
您首先调用groupby('speciality')
以按该列对数据进行分组。第二步是调用apply()
。然后,您将对每个组应用一个函数。在这种情况下,我们groupby
在其他必需的列上执行另一个并进一步调用group.sum().cumsum()
以获得所需的结果。
from io import StringIO
import pandas as pd
data = """
doc_created_month doc_created_year speciality doc_id_count
8 2016 Acupuncturist 1
2 2017 Acupuncturist 1
4 2017 Acupuncturist 1
4 2017 Allergist 1
5 2018 Allergist 1
10 2018 Allergist 2
"""
df = pd.read_csv(StringIO(data), sep='\s+')
(df.groupby('speciality')
.apply(lambda df_: df_.groupby(['doc_created_year', 'doc_created_month'])
.sum().cumsum())
)
输出:
doc_id_count
speciality doc_created_year doc_created_month
Acupuncturist 2016 8 1
2017 2 2
4 3
Allergist 2017 4 1
2018 5 2
10 4
推荐阅读
- c++ - 在字符串中查找一对字符
- javascript - 如何识别数据集中的断点(趋势线边缘)?
- asynchronous - SwiftUI + MVVM + 模型中的异步任务
- javascript - ML5 FeatureExtractor addImage 不工作
- javascript - 满足特定要求后替换数组中的多个数字
- javascript - 不断收到参考错误:将外部 Javascript 文件链接到 HTML 文件时未定义文档
- android - NavigationView 菜单不更新
- vector - Rust - 尝试从向量中删除结构元素时出错
- ruby-on-rails - 如何在 React 中以 json 格式发送表单数据?
- python - 在 VGG16 模型中使用灰度图像时出现“输入不兼容错误”