我有以下Pandas 数据框

import pandas as pd
import random

random.seed(42)

pd.DataFrame({'index': list(range(0,10)),
         'cluster': [random.choice(['S',  'C', ]) for l in range(0,10)]})


    index   cluster
0   0   S
1   1   S
2   2   C
3   3   S
4   4   S
5   5   S
6   6   S
7   7   S
8   8   C
9   9   S

我想创建5个新列,cluster列的每个唯一值一个,这将是每个值出现的累计和.

pandas的输出框架应该如下所示:

pd.DataFrame({'index': list(range(0,10)),
             'cluster': [random.choice(['S',  'C', ]) for l in range(0,10)],
             'cumulative_S': [1,2,2,3,4,5,6,7,7,8],
             'cumulative_C': [0,0,1,1,1,1,1,1,2,2]})

index   cluster cumulative_S    cumulative_C
0   0   S   1   0
1   1   S   2   0
2   2   C   2   1
3   3   S   3   1
4   4   S   4   1
5   5   S   5   1
6   6   S   6   1
7   7   S   7   1
8   8   C   7   2
9   9   S   8   2

我怎么才能做到这一点?

推荐答案

Code

df是您的输入数据帧

tmp = (pd.get_dummies(df['cluster'])
       .cumsum()[df['cluster'].unique()]
       .add_prefix('cumulative_')
)
输出 = pd.concat([df, tmp],axis=1)

输出

   index cluster  cumulative_S  cumulative_C
0      0       S             1             0
1      1       S             2             0
2      2       C             2             1
3      3       S             3             1
4      4       S             4             1
5      5       S             5             1
6      6       S             6             1
7      7       S             7             1
8      8       C             7             2
9      9       S             8             2

Python相关问答推荐

配置Sweetviz以分析对象类型列,而无需转换

使用Keras的线性回归参数估计

Python在tuple上操作不会通过整个单词匹配

使用miniconda创建环境的问题

处理带有间隙(空)的duckDB上的重复副本并有效填充它们

更改键盘按钮进入'

无法定位元素错误404

在Python中动态计算范围

我对我应该做什么以及我如何做感到困惑'

pandas:排序多级列

如何并行化/加速并行numba代码?

CommandeError:模块numba没有属性generated_jit''''

Flask Jinja2如果语句总是计算为false&

python sklearn ValueError:使用序列设置数组元素

用两个字符串构建回文

如何将一组组合框重置回无 Select tkinter?

使用tqdm的进度条

如何将列表从a迭代到z-以抓取数据并将其转换为DataFrame?

如何在Python中实现高效地支持字典和堆操作的缓存?

来自任务调度程序的作为系统的Python文件