gpt4 book ai didi

python - 如何在 DataFrame 中创建一个新列来显示不同列中的模式?

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

我的原始 CSV 文件如下所示

1, 9
2, 8
3, 9
14, 7
15, 6
19, 8
20, 9
21, 3

我将 A 列中的连续整数表分组为

for grp, val in df.groupby((df.diff()-1).fillna(0).cumsum().index1):
print(val)

结果表:

    A   B
1 1 9
2 2 8
3 3 9
A B
14 14 7
15 15 6
A B
19 19 8
20 20 9
21 21 3

实际上,B 值是很长的 ID 号,但作为数字来说微不足道。如何创建一个新的 C 列,通过为每个 ID 分配一个简单值,并为组中的每个重复项分配相同的简单值,来显示三个组中每组中的模式?

期望的输出:

    A   B   C
1 1 9 1
2 2 8 2
3 3 9 1
A B C
14 14 7 1
15 15 6 2
A B C
19 19 8 1
20 20 9 2
21 21 3 3

谢谢

最佳答案

你很接近

df['C']=df.groupby((df.A.diff()-1).fillna(0).cumsum()).B.apply(lambda x : pd.Series(pd.factorize(x)[0]+1)).values
df
Out[105]:
A B C
0 1 9 1
1 2 8 2
2 3 9 1
3 14 7 1
4 15 6 2
5 19 8 1
6 20 9 2
7 21 3 3

或者使用类别

df['C']=df.groupby((df.A.diff()-1).fillna(0).cumsum()).B.apply(lambda x : x.astype('category').cat.codes+1).values
df
Out[110]:
A B C
0 1 9 2
1 2 8 1
2 3 9 2
3 14 7 2
4 15 6 1
5 19 8 2
6 20 9 3
7 21 3 1

如果你需要for循环

for x,df1 in df.groupby((df.A.diff()-1).fillna(0).cumsum()):

print(df1.assign(C=pd.factorize(df1.B)[0]+1))


A B C
0 1 9 1
1 2 8 2
2 3 9 1
A B C
3 14 7 1
4 15 6 2
A B C
5 19 8 1
6 20 9 2
7 21 3 3

关于python - 如何在 DataFrame 中创建一个新列来显示不同列中的模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47985340/

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