python - 如何分隔 Pandas 中的顺序组?

标签 python

这个问题可能很奇怪,所以这里有一个例子。

假设我的数据如下所示:

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/

相关文章:

python - FMU 模块方法 get_states_list()

python - 从pdf中提取已知bbox中的文本,PDFQuery太慢

python - django-grappelli 不工作

python - Django 在重定向时找不到模式名称

python - 使用 cython 加速 python 代码

python - 使用 numpy 从元组到线性方程

Python - Json 转换 - 为什么使用相似的字符串格式会表现不同

python - 迭代多个全局列表和一个计数器 : for/while

python - 如何更改 PIP 以使用 Python 2.7

python - python 有选择地抑制输出