gpt4 book ai didi

python - Pandas 根据连续重复创建新列

转载 作者:行者123 更新时间:2023-12-04 01:01:10 24 4
gpt4 key购买 nike

我有一个如下所示的 Pandas 数据框,其中 A 列是一系列字符串,B 列中的值是 true/false,具体取决于 A 列的值是否与上一行。

A    B       
1 False
1 True
1b False
1b True
1b True
1 False

我想添加一个新列 C,它为所有连续重复 条目分配相同的值(可以是任何值),但此值必须与分配给其他值的值不同一组连续的重复条目。例如:

A    B        C
1 False 1
1 True 1
1b False 2
1b True 2
1b True 2
1 False 3

关于如何以有效的方式解决这个问题有什么想法吗?

最佳答案

试试groupby ngroup + 1 确保 sort=False 以确保组是按照它们在 DataFrame 中出现的顺序创建的:

df['C'] = df.groupby(['A', (~df['B']).cumsum()], sort=False).ngroup() + 1
    A      B  C
0 1 False 1
1 1 True 1
2 1b False 2
3 1b True 2
4 1b True 2
5 1 False 3

或者假设值按 cumsum 的排序顺序出现,可以直接使用以下任一方法:

df['C'] = (~df['B']).cumsum()
    A      B  C
0 1 False 1
1 1 True 1
2 1b False 2
3 1b True 2
4 1b True 2
5 1 False 3

这相当于:

df['A'].ne(df['A'].shift()).cumsum()
0    1
1 1
2 2
3 2
4 2
5 3
Name: A, dtype: int32

如果尚未计算 B 列,这将是解决此问题的标准方法。

关于python - Pandas 根据连续重复创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68171812/

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