我有一個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的轉換選項更復雜,更長。 –