![](/img/trans.png)
[英]Filling column of dataframe based on 'groups' of values of another column
[英]Filling empty values in one dataframe based on column in another dataframe?
我更改了列名Index
-> arg
以避免混淆。
首先加载数据帧
df1 = pd.DataFrame({
'arg': {0: 1.0, 1: 2.3, 2: 2.5, 3: 3.6, 4: 5.0, 5: 5.9, 6: 6.0, 7: 6.2, 8: 6.3, 9: 6.4},
'value': {0: 634.0, 1: 500.0, 2: 439.0, 3: 287.0, 4: 641.0, 5: 212.0, 6: 374.0, 7: 358.0, 8: 600.0, 9: 755.0}
})
df2 = pd.DataFrame({
'arg': {0: 1.0, 1: 1.4, 2: 1.8, 3: 2.2, 4: 2.4, 5: 2.8, 6: 3.2, 7: 3.6, 8: 4.0, 9: 4.4, 10: 4.8, 11: 5.2, 12: 5.6, 13: 6.0, 14: 6.4},
'value': {0: 634, 1: 8, 2: 218, 3: 813, 4: 338, 5: 339, 6: 935, 7: 287, 8: 376, 9: 481, 10: 727, 11: 555, 12: 50, 13: 374, 14: 755}
})
计算 df1 上的左连接并将值从 df1 更新到 df2。
temp = df1.merge(df2, on="arg", how="left")
df1["value"] = temp.value_y.combine_first(temp.value_x)
得到仍然 NaN 值
to_interpolate = df1[df1.value.isna()]
将没有值的参数添加到 df2 并插入它们的值。
df3 = pd.concat([to_interpolate, df2]).sort_values("arg")
df3.value.interpolate(inplace=True)
重复合并。
temp = df1.merge(df3, on="arg", how="left")
df1["value"] = temp.value_x.combine_first(temp.value_y)
print(df1)
输出:
arg value
0 1.0 634.0
1 2.3 500.0
2 2.5 439.0
3 3.6 287.0
4 5.0 641.0
5 5.9 212.0
6 6.0 374.0
7 6.2 358.0
8 6.3 600.0
9 6.4 755.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.