2017-08-10 53 views
1

我對Python(和熊貓)相當陌生,並且對於大型數據框我找不到解決方案,因此有替換任務。Python將數據框中的所有值替換爲來自其他數據框的值

所以我有兩個dataframes,一個(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_new替換所有的ID(所有列)在。理想情況下,如果給定數據集的大小,最好不必爲每列執行mergejoin

結果應該是這樣的: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? – Zero

回答

3

我想你需要通過replace創建Series通過set_index:(df2.set_index( 'ID')to_dict()[ 'Id_new'])

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,這個作品很棒! –

相關問題