gpt4 book ai didi

python - 如何修改 Pandas DataFrame 中所有重复值的行

转载 作者:太空宇宙 更新时间:2023-11-04 03:02:16 25 4
gpt4 key购买 nike

我有一个包含 ~250 000 行和 ~50 列的 DataFrame df。在一列中有重复值,例如这些(简化):

'A'     'B'
jean 626
michel 950
john 382
john 356 <-- duplicate value
boris 315
clara 886
george 619
edmund 365
edmund 523 <-- duplicate value
edmund 703 <-- duplicate value
tony 416
edgard 108
tom 374
fanny 784
lucy 660
paul 728
rebecca 919
rebecca 131 <-- duplicate value
roger 924

我想做的是创建一个新列“C”,其中:- 每次我在“A”中找到一个唯一值时,“C”中的值与“B”中的值相同- 每次我在“A”中发现重复值时,“C”中的相应值与重复组的第一个值相同。一个组中的重复项数量可以 > 20。

结果应该是:

'A'     'B' 'C'
jean 626 626
michel 950 950
john 382 382
john 356 382
max 315 315
clara 886 886
george 619 619
edmund 365 365
edmund 523 365
edmund 703 365
tony 416 416
edgard 108 108
tom 374 374
fanny 784 784
lucy 660 660
paul 728 728
rebecca 919 919
rebecca 131 919
roger 924 924

我试过下面的代码:

def myfunc(group):
group['C'][group['C']==0]=group['B'][0]
return group
df=df.groupby('A').apply(myfunc)

这可行,但执行起来需要非常非常长的时间(~600 秒)。有什么改进的想法吗?另一种更高效的解决方案?

最佳答案

您的输入与输出不完全匹配(例如,boris 与 max),但如果我理解您的要求,您可以使用 .transform("first"):

In [27]: df["C"] = df.groupby("A")["B"].transform("first")

In [28]: df.head(10)
Out[28]:
A B C
0 jean0 626 626
1 michel0 950 950
2 john0 382 382
3 john0 356 382
4 boris0 315 315
5 clara0 886 886
6 george0 619 619
7 edmund0 365 365
8 edmund0 523 365
9 edmund0 703 365

In [29]: len(df)
Out[29]: 249983

这对我来说只需要几秒钟。

关于python - 如何修改 Pandas DataFrame 中所有重复值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40576165/

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