Python Pandas,将NaN替换为多索引数据帧中的值
问题 我有一个带有一些NAN的数据帧,我试图根据另一个数据帧的值智能地填充这些NAN。我还没有找到一种有效的方法来做到这一点,但我怀疑有一种方法可以对付熊猫 最小示例 起始数据df: 查找表以查找要填充NAN的值:Python Pandas,将NaN替换为多索引数据帧中的值,python,pandas,dataframe,imputation,Python,Pandas,Dataframe,Imputation,问题 我有一个带有一些NAN的数据帧,我试图根据另一个数据帧的值智能地填充这些NAN。我还没有找到一种有效的方法来做到这一点,但我怀疑有一种方法可以对付熊猫 最小示例 起始数据df: 查找表以查找要填充NAN的值: fill_vals 1 a 89 b 91 2 a 99 b 101 期望输出: data index1 index2 0 89 1 a 1 90 1
fill_vals
1 a 89
b 91
2 a 99
b 101
期望输出:
data index1 index2
0 89 1 a
1 90 1 b
2 90 1 a
3 100 2 b
4 100 2 a
5 101 2 b
想法
我找到的最近的帖子是关于
我还尝试使用index1和index2列将df的索引设置为多索引,然后使用df.fillna,但是这不起作用。combine\u first是您需要的函数。但首先,更新另一个数据帧的索引名
fill_val_lookup.index.names = ["index1", "index2"]
fill_val_lookup.columns = ["data"]
df.index1 = df.index1.astype(int)
df.data = df.data.astype(float)
df.set_index(["index1","index2"]).combine_first(fill_val_lookup)\
.reset_index()
# index1 index2 data
#0 1 a 89.0
#1 1 a 90.0
#2 1 b 90.0
#3 2 a 100.0
#4 2 b 100.0
#5 2 b 101.0
data index1 index2
0 89 1 a
1 90 1 b
2 90 1 a
3 100 2 b
4 100 2 a
5 101 2 b
fill_val_lookup.index.names = ["index1", "index2"]
fill_val_lookup.columns = ["data"]
df.index1 = df.index1.astype(int)
df.data = df.data.astype(float)
df.set_index(["index1","index2"]).combine_first(fill_val_lookup)\
.reset_index()
# index1 index2 data
#0 1 a 89.0
#1 1 a 90.0
#2 1 b 90.0
#3 2 a 100.0
#4 2 b 100.0
#5 2 b 101.0