根据某些条件,用其他列中的值替换NaN

时间:2020-04-04 20:53:07

标签: python pandas

我有一个具有多个索引(编号和类型)的数据集,想要将Node1和Node2类型的列l2中的NaN值替换为l2中的R1值,并将Node3和Node4类型的NaN值替换为R2的l2值。 如何在熊猫中做到这一点?

    name    l1          l2
No. type        
1   Node1   41.656123   NaN
    Node2   95.232711   NaN
    Node3   41.660935   NaN
    Node4   95.144500   NaN
    R1       NaN    0.000144
    R2       NaN    0.000154
2   Node1   41.656142   NaN
    Node2   95.232730   NaN
    Node3   41.660957   NaN
    Node4   95.144525   NaN
    R1       NaN    0.000200
    R2       NaN    0.000232

预期结果应类似于:

    name    l1          l2
No. type        
1   Node1   41.656123   0.000144
    Node2   95.232711   0.000144
    Node3   41.660935   0.000154
    Node4   95.144500   0.000154
    R1       NaN    0.000144
    R2       NaN    0.000154
2   Node1   41.656142   0.000200
    Node2   95.232730   0.000200
    Node3   41.660957   0.000232
    Node4   95.144525   0.000232
    R1       NaN    0.000200
    R2       NaN    0.000232

1 个答案:

答案 0 :(得分:0)

Extract数据帧,其中type分别等于{1}和{2}分别与Node1和Node 2的R1和R2的R1replace

R2

Drop df1=df.query('type == ["R2", "R1"]').reset_index()f#filter Rs to be renamed as Nodes for purposes of joining down the line df3=df.query('type == ["R2", "R1"]').reset_index()#.set_index('No.')# filter of Rs not to be renamed but to be reappended later df1.replace(['R1','R2'], ['Node1','Node3'], inplace=True) ,因为这里不需要它,它具有l2并重置了索引

NaNs

提取与df1.drop(columns=['l1'], inplace=True) df1.set_index(['No.','type'], inplace=True) df1 type不相等的R1数据框

R2

拖放df2=df.query('type != ["R2", "R1"]').reset_index()#.set_index('No.') 是因为这里不需要它,它具有l2并重置了索引

NaNs

Merge两个数据框

df2.drop(columns=['l2'], inplace=True)
df2.set_index(['No.','type'], inplace=True)
df2

回调df4=df1.merge(df2, left_index=True, right_index=True, how='outer').ffill() 的填充符并设置索引以符合Rs

df4

df3.set_index(['No.','type'], inplace=True) df3 附加到df3并按索引排序

df4

输出

enter image description here

相关问题