2017-08-10 7 views
1

私はPython(およびpandas)にはかなり新しく、大きなデータフレームのための置き換えタスクを持っています。Pythonはdataframeのすべての値を他のデータフレームの値に置き換えます

だから私は2つのデータフレームを、持っている1次のようになります(df1):

Id  Id  Id  
4954733 3929949 515674 
2950086 1863885 4269069 
1241018 3711213 4507609 
3806276 2035233 4968071 
4437138 1248817 1167192 
5468160 4726010 2851685 
1211786 2604463 5172095 
2914539 5235788 4130808 
4730974 5835757 1536235 
2201352 5779683 5771612 
3864854 4784259 2928288 

すべて「古い」のidの次の列の対応する、新しいものを含む他のデータフレーム(df2)( 1〜20,000)、このようなものになりますた:

Id  Id_new 
5774290 1 
761000 2 
3489755 3 
1084156 4 
2188433 5 
3456900 6 
4364416 7 
3518181 8 
3926684 9 
5797492 10 
4435820 11 

をから対応Id_newdf1内のすべてのIDの(すべての列)を交換された私は何をしたいです。理想的には、データセットのサイズを考慮して、各列に対してmergeまたはjoinを実行する必要はありませんか?

結果は次のようにする必要があります:df_new

Id_new Id_new Id_new 
8  12  22 
16  9  8 
21  25  10 
10  15  13 
29  6  4 
22  7  22 
30  3  3 
11  31  29 
32  29  27 
12  3  4 
14  6  24 

任意のヒントは、事前のおかげで素晴らしいことです!

+4

'df1.replace(df2.set_index( 'ID')to_dict()[ 'Id_new']。)'? – Zero

答えて

3

私はあなたがset_indexによって作成Seriesreplaceが必要だと思う:

print (df1) 
     Id  Id.1  Id.2 
0 4954733 3929949 515674 <-first value changed for match data 
1 2950086 1863885 4269069 
2 1241018 3711213 4507609 
3 3806276 2035233 4968071 
4 4437138 1248817 1167192 
5 5468160 4726010 2851685 
6 1211786 2604463 5172095 
7 2914539 5235788 4130808 
8 4730974 5835757 1536235 
9 2201352 5779683 5771612 
10 3864854 4784259 2928288 

df = df1.replace(df2.set_index('Id')['Id_new']) 
print (df) 
     Id  Id.1  Id.2 
0   1 3929949 515674 
1 2950086 1863885 4269069 
2 1241018 3711213 4507609 
3 3806276 2035233 4968071 
4 4437138 1248817 1167192 
5 5468160 4726010 2851685 
6 1211786 2604463 5172095 
7 2914539 5235788 4130808 
8 4730974 5835757 1536235 
9 2201352 5779683 5771612 
10 3864854 4784259 2928288 
+1

ありがとう、@ jezraelと@johngalt、これは素晴らしいです! –

関連する問題