Python 熊猫:合并两个数据帧
假设我有以下两个Python 熊猫:合并两个数据帧,python,pandas,merging-data,Python,Pandas,Merging Data,假设我有以下两个数据帧: X Y Z 1 0.0 0.0 0.0 2 1.0 2.0 3.0 3 4.0 2.0 0.0 4 NaN NaN NaN 5 NaN NaN NaN 6 NaN NaN NaN 7 NaN NaN NaN 8 NaN NaN NaN 及 我想用第二个数据框中的值来填充第一个数据框中缺少的数据。结果应该如下所示: X Y Z 1 0.0 0.0 0.0 2 1.0 2.0 3.0 3 4.0 2
数据帧
:
X Y Z
1 0.0 0.0 0.0
2 1.0 2.0 3.0
3 4.0 2.0 0.0
4 NaN NaN NaN
5 NaN NaN NaN
6 NaN NaN NaN
7 NaN NaN NaN
8 NaN NaN NaN
及
我想用第二个数据框中的值来填充第一个数据框中缺少的数据。结果应该如下所示:
X Y Z
1 0.0 0.0 0.0
2 1.0 2.0 3.0
3 4.0 2.0 0.0
4 NaN NaN NaN
5 NaN NaN NaN
6 9.0 3.0 6.0
7 7.0 4.0 3.0
8 3.0 6.0 8.0
如果可能,我希望避免创建新的数据框
,而是将第一个数据框
填充到位
如何执行此操作?如果重命名第二个数据帧的列,则可以使用concat和groupby,如下所示:
In[96]: df1
Out[96]:
X Y Z
1 0 0 0
2 1 2 3
3 4 2 0
4 NaN NaN NaN
5 NaN NaN NaN
6 NaN NaN NaN
7 NaN NaN NaN
8 NaN NaN NaN
In[101]: df2
Out[101]:
X Y Z
1 NaN NaN NaN
2 NaN NaN NaN
3 NaN NaN NaN
4 NaN NaN NaN
5 NaN NaN NaN
6 9 3 6
7 7 4 3
8 3 6 8
In[102]: pd.concat([df1,df2]).groupby(level=0).sum()
Out[102]:
X Y Z
1 0 0 0
2 1 2 3
3 4 2 0
4 NaN NaN NaN
5 NaN NaN NaN
6 9 3 6
7 7 4 3
8 3 6 8
您只需继续执行update
,它根据df2
的值填充第一个数据帧df1
:
df2.columns = df1.columns
df1.update(df2)
In [118]: df1
Out[118]:
X Y Z
1 0 0 0
2 1 2 3
3 4 2 0
4 NaN NaN NaN
5 NaN NaN NaN
6 9 3 6
7 7 4 3
8 3 6 8
如果将列对齐,则fillna()将执行以下操作:
df2.columns = df1.column
df1.fillna(df2, inplace=True)
df1
X Y Z
1 0 0 0
2 1 2 3
3 4 2 0
4 NaN NaN NaN
5 NaN NaN NaN
6 9 3 6
7 7 4 3
8 3 6 8
工作起来很有魅力!谢谢!
df2.columns = df1.columns
df1.update(df2)
In [118]: df1
Out[118]:
X Y Z
1 0 0 0
2 1 2 3
3 4 2 0
4 NaN NaN NaN
5 NaN NaN NaN
6 9 3 6
7 7 4 3
8 3 6 8
df2.columns = df1.column
df1.fillna(df2, inplace=True)
df1
X Y Z
1 0 0 0
2 1 2 3
3 4 2 0
4 NaN NaN NaN
5 NaN NaN NaN
6 9 3 6
7 7 4 3
8 3 6 8