这个问题可能很奇怪,所以这里有一个例子。
假设我的数据如下所示:
A B
a 2
a 1
a 1
b 3
b 1
a 4
c 3
c 6
c 7
如您所见,有 3 个元素 a、b、c,我们可以像这样进行分组和聚合:
a 8
b 4
c 16
但我真正想做的是,我想“分离”“组内”。 所以想要的结果是:
a 4
b 4
a 4
c 16
这意味着第一个连续的“a”组和后面出现的第二个“a”被区别对待。让我简单地通过列表向您展示。
[[a,a,a],[b,b],[a],[ccc]]
重点是我们必须考虑顺序。不是只用pandas cumcount,它只考虑出现次数。我想划分每个“序列”,即使在同一个元素组中也是如此。(第一个 aaa 和第二个 aaa 不同)
我认为这在 pandas 中并不那么简单,尽管我只是通过明确的基于函数的逻辑来避免完成这项工作。简而言之,我想更简单地做到这一点。有什么想法吗?
最佳答案
您可以使用shift-cumsum 模式。
>>> df.groupby((df['A'] != df['A'].shift()).cumsum(), as_index=False).agg(
{'A': 'first', 'B': 'sum'})
# Output:
# A B
# 0 a 4
# 1 b 4
# 2 a 4
# 3 c 16
关于python - 如何分隔 Pandas 中的顺序组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45343602/