我有一个DataFrame df,具有〜250 000行和〜50列。 在列有重复值,像这样(简化):如何修改Pandas DataFrame中重复值的所有行
'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秒)。 任何想法来改善这一点?另一种更高效的解决方案?
“A”列的初始顺序是否重要?我试图看看是否首先执行'df = df.sort_values(by ='A')'是一个大问题。 否则,您的副本是否已在您的示例中分组?或者你可以像['约翰','约翰','notjohn','约翰']? –
“A”的初始顺序并不重要。您可以按'A'对df进行排序。 – Styx
没关系,我已经制定了一个解决方案,但这比@ DSM的转换选项更复杂,更长。 –