2017-04-05 44 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