【问题标题】:Cumulative Sum using 2 columns使用 2 列的累积和
【发布时间】:2018-06-10 12:41:38
【问题描述】:

我正在尝试创建一个使用 2 列进行累积总和的列,请参阅我正在尝试做的示例:@Faith Akici

  index lodgement_year  words       sum  cum_sum
    0   2000            the          14     14
    1   2000            australia    10     10
    2   2000            word         12     12
    3   2000            brand         8      8
    4   2000            fresh         5      5
    5   2001            the           8      22
    6   2001            australia     3      13
    7   2001            banana        1       1
    8   2001            brand         7      15
    9   2001            fresh         1       6

我使用了下面的代码,但是我的电脑一直在崩溃,我不确定是代码还是电脑。任何帮助将不胜感激:

   df_2['cumsum']= df_2.groupby('lodgement_year')['words'].transform(pd.Series.cumsum)

更新;我也使用了下面的代码,它工作并说退出代码 0。但是有一些警告。

df_2['cum_sum'] =df_2.groupby(['words'])['count'].cumsum()

【问题讨论】:

  • 'lodgement_year' 还是'lodgement_date'
  • 您好,它的 lodgemement_year(对不起)。 @Piinthesky 我只是想参考前一个问题的上下文。但是很高兴删除。
  • 需要'lodgement_year'吗?根据样本输出,似乎累积总和只是基于“单词”?
  • 你能显示预期的输出数据帧吗?
  • 嗨,对不起......上面的 cum_sum 是我试图创建的列。并且下面的代码有效,但是它在顶部打印了一些警告。 df_2['cum_sum'] =df_2.groupby(['words'])['count'].cumsum()

标签: python pandas cumulative-frequency


【解决方案1】:

你快到了,伊恩!

cumsum() 方法计算 Pandas 列的累积和。您正在寻找应用于分组words 的那个。因此:

In [303]: df_2['cumsum'] = df_2.groupby(['words'])['sum'].cumsum()

In [304]: df_2
Out[304]: 
   index  lodgement_year      words  sum  cum_sum  cumsum
0      0            2000        the   14       14      14
1      1            2000  australia   10       10      10
2      2            2000       word   12       12      12
3      3            2000      brand    8        8       8
4      4            2000      fresh    5        5       5
5      5            2001        the    8       22      22
6      6            2001  australia    3       13      13
7      7            2001     banana    1        1       1
8      8            2001      brand    7       15      15
9      9            2001      fresh    1        6       6

如果这在您更大的数据集上失败,请发表评论,我们将开发一个可能更准确的版本。

【讨论】:

  • 像往常一样,感谢 Fatih 的支持。它有效,我使用的代码: df_2['cum_sum'] =df_2.groupby(['words'])['count'].cumsum() 也有效。我会确保在下一个问题中正确拼写你的名字:)
  • @FatihAkici ,喜欢这样吗?下一个讨论,stackoverflow.com/questions/48175666/…
【解决方案2】:

如果我们只需要考虑“单词”列,我们可能需要遍历单词的唯一值

for unique_words in df_2.words.unique():
    if 'cum_sum' not in df_2:
        df_2['cum_sum'] = df_2.loc[df_2['words'] == unique_words]['sum'].cumsum()
    else:
        df_2.update(pd.DataFrame({'cum_sum': df_2.loc[df_2['words'] == unique_words]['sum'].cumsum()}))

以上将导致:

>>> print(df_2)
  lodgement_year  sum      words  cum_sum
0           2000   14        the     14.0
1           2000   10  australia     10.0
2           2000   12       word     12.0
3           2000    8      brand      8.0
4           2000    5      fresh      5.0
5           2001    8        the     22.0
6           2001    3  australia     13.0
7           2001    1     banana      1.0
8           2001    7      brand     15.0
9           2001    1      fresh      6.0

【讨论】:

  • 您好,奇怪的是,您的代码没有在我的文件上运行。我的文件包含 120 年的数据和每年大约 65 万字,这可能是个问题吗?你能尝试我的代码并给我一些反馈吗?谢谢
猜你喜欢
  • 1970-01-01
  • 2023-01-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多