【问题标题】:Compute number of occurance of each value and Sum another column in Pandas计算每个值的出现次数并对 Pandas 中的另一列求和
【发布时间】:2019-12-08 12:59:12
【问题描述】:

我有一个熊猫数据框,里面有一些列。我感兴趣的专栏是这样的,

df['col'] = ['A', 'A', 'B', 'C', 'B', 'A']

我想让另一列说col_count,这样它会在col 中显示从该索引到列末尾的计数值。

列中的第一个 A 应该具有值 3,因为在该索引的列中出现了 3 次 A。第二个 A 将具有值 2 等等。

最后,我想得到如下结果,

    col     col_count
0   A   3
1   A   2
2   B   2
3   C   1
4   B   1
5   A   1

如何在 pandas 中有效地做到这一点。?我可以通过循环遍历数据帧并为切片数据帧获取该值的唯一计数来做到这一点。

有没有一种有效的方法来做到这一点。最好是没有循环的东西。

问题的另一部分是,我有另一个这样的专栏以及col,

df['X'] = [10, 40, 10, 50, 30, 20]

我想以与计算列col 相同的方式总结此列。

例如,在索引 0 处,我将有 10 + 40 + 20 作为总和。在索引 1 处,总和将为 40 + 20。简而言之,我不想计算,而是想对另一列求和。

结果会是这样,

    col     col_count   X   X_sum
0   A   3   10  70
1   A   2   40  60
2   B   2   10  40
3   C   1   50  50
4   B   1   30  30
5   A   1   20  20

【问题讨论】:

标签: python pandas


【解决方案1】:

将pandas.Series.groupby 与cumcount 和cumsum 一起使用。

g = df[::-1].groupby('col')
df['col_count'] = g.cumcount().add(1)
df['X_sum'] = g['X'].cumsum()
print(df)

输出:

  col   X  col_count  X_sum
0   A  10          3     70
1   A  40          2     60
2   B  10          2     40
3   C  50          1     50
4   B  30          1     30
5   A  20          1     20

【讨论】:

  • 这不是我要找的结果
  • 看起来不错,让我测试一些情况。我也有这个问题的第 2 部分,我会为此更新
  • @SreeramTP 已更新。请注意,cumcount 也已更改。此外,不建议发布 2 部分问题。阅读this post 可能会有所帮助。
  • 是的。我想既然两者都是相似的情况,我会把它放在同一个 Q
  • 因为cumcount 和cumsum 的期望输出都是按降序排列的。 cumcount 默认支持计数降序,但cumsum 不支持。而不是仅将[::-1] 应用于cumsum,将其应用于整个数据集可以让您在使用这两种方法时保持一致。
猜你喜欢
  • 1970-01-01
  • 2020-08-21
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
  • 2016-06-02
  • 2019-03-08
  • 1970-01-01
  • 2019-03-27
相关资源
最近更新 更多