我有一个DataFrame df,大约有250,000行和50列。
在某一列中存在重复的值,例如(简化):
我想要做的是创建一个名为“C”的新列,其中: - 每当我在“A”中发现一个唯一值时,“C”中的值与“B”中的值相同 - 每当我在“A”中发现重复值时,对应的“C”中的值与重复组的第一个值相同。 一组中的重复数量可能大于20。
结果应该是:
我尝试了以下代码:
这个可以运行,但需要非常长的时间才能执行(大约600秒)。有什么办法可以改进吗?还有其他更有效的解决方案吗?
'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秒)。有什么办法可以改进吗?还有其他更有效的解决方案吗?
df = df.sort_values(by='A')
是否是一个大问题。 否则,你的重复值是否已经像你的示例那样分组了?或者你可能会有['john', 'john','notjohn','john']这样的情况吗? - Julien Marrec