问题可能很奇怪,所以这是一个例子。
假设我的数据如下所示:
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是不同的)
我不认为熊猫这么简单,虽然我只是通过制作明确的基于功能的逻辑来避免做这项工作。简而言之,我想更简单地做到这一点。有什么想法吗?
答案 0 :(得分:1)
您可以使用 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