gpt4 book ai didi

python - Pandas 计数组数

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

给定以下数据框:

df=pd.DataFrame({'col1':['A','A','A','A','A','A','B','B','B','B','B','B'],
'col2':['x','x','y','z','y','y','x','y','y','z','z','x'],
})
df

col1 col2
0 A x
1 A x
2 A y
3 A z
4 A y
5 A y
6 B x
7 B y
8 B y
9 B z
10 B z
11 B x

我想创建一个新列,col3它对 col2 中的值进行分类按顺序按 col1 中的值分组:

    col1    col2    col3
0 A x x1
1 A x x1
2 A y y1
3 A z z1
4 A y y2
5 A y y2
6 B x x1
7 B y y1
8 B y y1
9 B z z1
10 B z z1
11 B x x2

在上面的示例中,col3[0:1]值为 x1因为它是第一组x col2 中的值对于 col1 = Acol3[4:5]值为 y2因为它是第二组y col2 中的值对于 col1 = A等等...

我希望描述有意义。我无法找到答案,部分原因是我找不到一种优雅的方式来表达我正在寻找的内容。

最佳答案

这是我的方法:

groups = (df.assign(s=df.groupby('col1')['col2']   # group col2 by col1
.shift().ne(df['col2']) # check if col2 different from the previous (shift)
.astype(int) # convert to int
) # the new column s marks the beginning of consecutive blocks with `1`
.groupby(['col1','col2'])['s'] # group `s` by `col1` and `col2`
.cumsum() # cumsum by group
.astype(str)
)

df['col3'] = df['col2'] + groups

输出:

   col1 col2 col3
0 A x x1
1 A x x1
2 A y y1
3 A z z1
4 A y y2
5 A y y2
6 B x x1
7 B y y1
8 B y y1
9 B z z1
10 B z z1
11 B x x2

关于python - Pandas 计数组数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60312994/

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