【问题标题】:Pandas Cumulative sum over 1 indice but not the other 3Pandas 累积总和超过 1 个指数,但不超过其他 3 个
【发布时间】:2021-10-13 20:02:25
【问题描述】:

我有一个包含 4 个变量 DIVISION、QTR、MODEL_SCORE、MONTH 的数据框,其中变量 X 的总和由这 4 个变量聚合而成。

我想按 DIVISION、QTR 和 MODEL SCORE 对数据进行有效分区,并保持 MONTH FIELD 顺序从小到大的运行总顺序。如果它得到其他 3 列的新排列,它会重置的想法

df = df.groupby(['DIVISION','MODEL','QTR','MONTHS'])['X'].sum()

我在努力

df['cumsum'] = df.groupby(level=3)['X'].cumsum()

尝试了所有我能在 level 参数中想到的数字。它似乎能够以我想要的方式以外的任何方式工作。

编辑:我知道下面的格式不理想,但基本上只要唯一的变量变化是 MONTH,累积总和就会继续,但任何其他变量都会导致它重置。

DIVSION QTR  MODEL  MONTHS  X  CUMSUM
      A   1    1       1 10      10
      A   1    1       2 20      30
      A   1    2       1  5       5

【问题讨论】:

  • 最好能提供小样本数据和预期输出。
  • 复制/粘贴print(df.head().to_string())的输出,应该够了。
  • .sum(['X']) 并没有按照你的想法去做。在groupby sum 中,您的代码等同于df = df.groupby(['DIVISION','MODEL','QTR','MONTHS']).sum(numeric_only=['X']),而['X'] 是一个非空列表是真实的。
  • 我编辑了你的数据框。请检查我是否没有弄错。
  • @HenryEcker 我想我知道你的意思现在我已经编辑了。

标签: pandas dataframe cumsum


【解决方案1】:

对于所有的麻烦,我深表歉意,我相信答案比我想象的要简单得多。

之后

df = df.groupby(['DIVISION','MODEL','QTR','MONTHS'])['X'].sum()

我应该重置我不想要多索引的索引,这似乎奏效了。

df = df.reset_index()
df['cumsum'] = df.groupby(['DIVISION','MODEL','QTR'])['X'].cumsum()

【讨论】:

  • df = df.groupby(['DIVISION','MODEL','QTR','MONTHS'], as_index=False)['X'].sum() 如果您想避免 MultiIndex 而无需稍后再使用reset_index,也应该可以工作。
猜你喜欢
  • 2021-10-28
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
  • 2013-08-08
  • 2019-02-15
  • 1970-01-01
  • 2014-11-20
  • 1970-01-01
相关资源
最近更新 更多