2017-04-05 50 views
0

我有兩個熊貓數據框。一個包含實際數據,第二個包含我需要用某個值替換的行索引。根據查找更改熊貓中的行值

DF1:輸入記錄

A   B  record_id record_type 
0 12342345 10   011   H 
1 65767454 20   012   I 
2 78545343 30   013   I 
3 43455467 40   014   I 

DF2:信息包含行索引需要改變(例如:這裏是#)

Column1 Column2 Column3 record_id 
0  1  2  4  011 
1  1  2  None 012 
2  1  2  4  013 
3  1  2  None 014 

輸出結果:

A   B   record_id record_type 
0 #   #   011   # 
1 #   #   012   I 
2 #   #   013   # 
3 #   #   014   I 

所以基於record_id查找並且想要改變相應的行索引值。

這裏(1 2 4 011)目前在DF2包含說,我們首先要修改行索引,第二和第四的特定記錄從DF1 id爲011的信息。

所以在輸出結果我們替換行值記錄ID 011行索引1,2,4和填充值#。

請提出任何其他的方法來做到同樣的大熊貓。

回答

1

首先,你可以做一些預處理,使生活更輕鬆。將索引設置爲record_id,然後將df2中的column3重命名爲record_type。現在,數據幀具有相同的索引和列名稱,並且可以輕鬆自動對齊。

df1 = df1.set_index('record_id') 
df2 = df2.set_index('record_id') 
df2 = df2.rename(columns={'Column3':'record_type'}) 
df2 = df2.replace('None', np.nan) 

然後,我們可以在缺少與D2 DF2的填充值,然後讓所有的原始非缺失值「#」。

df2.fillna(df1).where(df2.isnull()).fillna('#') 

      Column1 Column2 record_type 
record_id        
11    #  #   # 
12    #  #   I 
13    #  #   # 
14    #  #   I 
+0

我想基於RECORD_ID存在於Df2.Df2 COLUMN1做查找,列2,欄3包含用於我要填充在DF1#值的索引號(例如:[1 2 4 011]行表示I想要修改Df1中的行ID爲011的行索引第一次,第二次和第四次)。因此,由您提供的輸入將直接替換我不想要的#值。 – mandar