Python 用另一个数据帧中的值填充空值
我有两个数据帧。在dataframe1中,我有一个包含一些空值的列。我希望通过比较每个数据帧的不同列的值,使用另一个数据帧(即dataframe2)的值来填充这些空值 数据帧1:Python 用另一个数据帧中的值填充空值,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧。在dataframe1中,我有一个包含一些空值的列。我希望通过比较每个数据帧的不同列的值,使用另一个数据帧(即dataframe2)的值来填充这些空值 数据帧1: Col1 Col2 A Null B Null C NUll A 1000 B 1120 C 3200 数据帧2: Col1 Col2 A 500 B 110 C 320 现在我想用第二个数据帧中的值填充第一个数据帧中的空值,其中dataframe1.col1=
Col1 Col2
A Null
B Null
C NUll
A 1000
B 1120
C 3200
数据帧2:
Col1 Col2
A 500
B 110
C 320
现在我想用第二个数据帧中的值填充第一个数据帧中的空值,其中dataframe1.col1=dataframe2.col1
最终所需输出如下所示:
Col1 Col2
A 500
B 110
C 320
A 1000
B 1120
C 3200
如何在熊猫数据帧中执行此操作。您可以使用替换NaN
s by或:
详细信息:
print(df1['Col1'].map(df2.set_index('Col1')['Col2']))
0 500
1 500
2 320
3 500
4 110
5 320
Name: Col1, dtype: int64
print(df2.set_index('Col1')['Col2'])
Col1
A 500
B 110
C 320
Name: Col2, dtype: int64
另一种解决方案是根据映射的条件值进行过滤:
m = df1['Col2'] == 'Null'
df1.loc[m, 'Col2'] = df1.loc[m, 'Col1'].map(df2.set_index('Col1')['Col2'])
print (df1)
Col1 Col2
0 A 500
1 B 110
2 C 320
3 A 1000
4 B 1120
5 C 3200
您可以将字符串转换为nan,然后组合数据帧,即
df.assign(Col2 = pd.to_numeric(df.Col2,errors='coerce'))\
.set_index('Col1').combine_first(df2.set_index('Col1')).reset_index())
Col1 Col2
0 A 500.0
1 A 1000.0
2 B 110.0
3 B 1120.0
4 C 320.0
5 C 3200.0
我的标准方法是将series.replace/series.fillna与series.map(dict)结合起来
这是排序问题,你赢了,先生。因为OP在最后没有提到索引,所以让解决方案留在这里。
df.assign(Col2 = pd.to_numeric(df.Col2,errors='coerce'))\
.set_index('Col1').combine_first(df2.set_index('Col1')).reset_index())
Col1 Col2
0 A 500.0
1 A 1000.0
2 B 110.0
3 B 1120.0
4 C 320.0
5 C 3200.0
fill_dict = dataframe2.set_index('Col1')['Col2'].to_dict()
dataframe1['Col2'] = dataframe1['Col2'].replace('Null', dataframe1['Col1'].map(fill_dict))