gpt4 book ai didi

python - 在 Pandas : Python 的另一列中查找重复数字时如何生成一列序列号

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

我正在使用以下字典并在 Pandas 中开发以在数据框中操作它:

    data = {"Value": [4, 4, 2, 1, 1, 1, 0, 7, 0, 4, 1, 1, 3, 0, 3, 0, 7, 0, 4, 1, 0, 1, 0, 1, 4, 4, 2, 3],
"IdPar": [0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 0, 0, 22, 22, 28, 28, 28, 28, 0, 0, 38, 38 , 0, 0, 0, 0, 0]
}

df = pd.DataFrame(data)
我想实现的是,当它在 IdPar 列中找到重复的数字时,会在同一行中生成一个序列号,但会在名为 Count 的新列中生成,条件是如果找到 0,则在新列。接下来我展示我期望得到的:
      Value  IdPar  Count
0 4 0 0
1 4 0 0
2 2 0 0
3 1 0 0
4 1 0 0
5 1 0 0
6 0 10 1
7 7 10 2
8 0 10 3
9 4 10 4
1 1 10 5
1 1 0 0
1 3 0 0
1 0 22 1
1 3 22 2
1 0 28 1
1 7 28 2
1 0 28 3
1 4 28 4
1 1 0 0
2 0 0 0
2 1 38 1
2 0 38 2
2 1 0 0
2 4 0 0
2 4 0 0
2 2 0 0
2 3 0 0
我所做的是查看pandas信息,我尝试了很多功能,我发现使用 ne , shift , cumsum , groupby , pivot_tabletransform函数,但这不是我想要的结果:
    s = df.pivot_table(index = ['IdPar'], aggfunc = 'size')
print(s)

t = df['IdPar'].ne(df['IdPar'].shift()).cumsum()
print(t)

df ['Count'] = df['IdPar'].isin(df['Id_Par'])
df ['Count'] = df.loc[df ['Count'] == True, 'IdPar']
print(df)
我已经走了多远是在列中计算出现它的行前面的重复次数的总和或 IdPar 中数字的重复次数。列开始,这是下面的代码,但我也不想要:
     df['Count'] = df.groupby(['IdPar'])['Value'].transform('count')
print(df['Count'])
我真的很感谢任何可以帮助我的人。任何评论都有帮助。

最佳答案

试试 cumcount :

df['Count'] = df.groupby('IdPar')['IdPar'].cumcount() + 1
df.loc[df['IdPar'] == 0, 'Count'] = 0
print(df)
或者在一行中尝试:
df['Count'] = df.groupby('IdPar').cumcount().add(1).mask(df['IdPar'].eq(0), 0)
两个代码输出:
    IdPar  Value  Count
0 0 4 0
1 0 4 0
2 0 2 0
3 0 1 0
4 0 1 0
5 0 1 0
6 10 0 1
7 10 7 2
8 10 0 3
9 10 4 4
10 10 1 5
11 0 1 0
12 0 3 0
13 22 0 1
14 22 3 2
15 28 0 1
16 28 7 2
17 28 0 3
18 28 4 4
19 0 1 0
20 0 0 0
21 38 1 1
22 38 0 2
23 0 1 0
24 0 4 0
25 0 4 0
26 0 2 0
27 0 3 0

关于python - 在 Pandas : Python 的另一列中查找重复数字时如何生成一列序列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68780223/

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