私は〜250,000行と〜50個の列を持つDataFrame dfを持っています。これらは(簡体字)のような はコラムでは、重複値がある:私がやりたい何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)
をそれがかかります非常に、非常に長い時間をexec(〜600秒)。 これを改善する考えですか?より効率的にこれを行うためのもう1つのソリューション?
「A」列の最初の順序が重要ですか?私は最初の 'df = df.sort_values(by = 'A') 'が大きな問題であるかどうかを調べようとしています。 それ以外の場合は、例のように重複は既にグループ化されていますか?または、あなたは['ジョン'、 'ジョン'、 'ノージョーン'、 'ジョン'のようなことができますか? –
'A'の最初の順序は重要ではありません。 dfは 'A'でソートすることができます。 – Styx
私は解決策を見つけ出しましたが、それは@ DSMの変換オプションより複雑で長くなります。 –