我有一个具有多个索引(编号和类型)的数据集,想要将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
答案 0 :(得分:0)
Extract数据帧,其中type
分别等于{1}和{2}分别与Node1和Node 2的R1和R2的R1
和replace
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
输出