gpt4 book ai didi

python - 如何在数据框的多列上应用累积计数

转载 作者:太空宇宙 更新时间:2023-11-04 08:31:10 24 4
gpt4 key购买 nike

数据框

    a   b   c
0 0 1 1
1 0 1 1
2 0 0 1
3 0 0 1
4 1 1 0
5 1 1 1
6 1 1 1
7 0 0 1

我正在尝试在数据框的多列上应用累积计数 cumcount,我尝试通过对每一列进行分组来应用累积计数。有什么简单的方法可以达到预期的输出

我试过这段代码,但它不起作用

li =[]
for column in df.columns:
li.append(df.groupby(column)[column].cumcount())
pd.concat(li,axis=1)

预期输出

    a   b   c
0 1 1 1
1 1 2 2
2 1 1 3
3 1 1 4
4 1 1 1
5 2 2 1
6 3 3 2
7 1 1 3

最佳答案

通过与移位值进行比较来创建连续的组,并为每一列应用 cumcount,最后通过 bool 掩码设置 1:

df = (df.ne(df.shift()).cumsum()
.apply(lambda x: df.groupby(x).cumcount() + 1)
.mask(df == 0, 1))
print (df)
a b c
0 1 1 1
1 1 2 2
2 1 1 3
3 1 1 4
4 1 1 1
5 2 2 1
6 3 3 2
7 1 1 3

如果性能很重要,另一种解决方案 - 仅计算 1 值并通过 np.where 掩码最后设置 1:

a = df == 1
b = a.cumsum()
arr = np.where(a, b-b.mask(a).ffill().fillna(0).astype(int), 1)

df = pd.DataFrame(arr, index=df.index, columns=df.columns)
print (df)
a b c
0 1 1 1
1 1 2 2
2 1 1 3
3 1 1 4
4 1 1 1
5 2 2 1
6 3 3 2
7 1 1 3

关于python - 如何在数据框的多列上应用累积计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52812748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com