如何解决如何在python pandas中合并两个数据框之前估算值,以避免数据丢失
我有两个数据帧df1
和df2
,如下所示:
df1
name posteam down rush
0 A.Ekeler LAC 1.0 35.7
1 A.Ekeler LAC 2.0 15.1
2 A.Ekeler LAC 3.0 15.9
3 A.Ekeler LAC 4.0 0.4
4 A.Jones GB 1.0 105.1
5 A.Jones GB 2.0 79.2
6 A.Jones GB 3.0 8.1
7 A.Jones GB 4.0 1.0
df2
name posteam down passes
0 A.Ekeler LAC 1.0 122.8
1 A.Ekeler LAC 2.0 63.2
2 A.Ekeler LAC 3.0 39.0
3 A.Ekeler LAC 4.0 -1.0
4 A.Jones GB 1.0 43.7
5 A.Jones GB 2.0 52.0
6 A.Jones GB 3.0 10.4
我想将它们合并到name
,posteam
和down
行中。但是,name
下的某些值在down == 4
中有df1
的数据,但没有df2
的数据(请看A.Jones。一个df有 down == 4
数据,另一个没有)。合并时,由于我要与down
合并,因此down == 4
上的值会消失,就像这样:
merged = pd.merge(df1,df2,on=['name','posteam','down'])
name posteam down rush passes
0 A.Ekeler LAC 1.0 35.7 122.8
1 A.Ekeler LAC 2.0 15.1 63.2
2 A.Ekeler LAC 3.0 15.9 39.0
3 A.Ekeler LAC 4.0 0.4 -1.0
4 A.Jones GB 1.0 105.1 43.7
5 A.Jones GB 2.0 79.2 52.0
6 A.Jones GB 3.0 8.1 10.4
玩家A.Jones
在down == 4
中有df1
的数据,但没有df2
中的数据。我该如何为其中一个df中没有数据的播放器估算一个0
,以使它们在合并时不会消失?像这样(请看索引7):
df2
name posteam down passes
0 A.Ekeler LAC 1.0 122.8
1 A.Ekeler LAC 2.0 63.2
2 A.Ekeler LAC 3.0 39.0
3 A.Ekeler LAC 4.0 -1.0
4 A.Jones GB 1.0 43.7
5 A.Jones GB 2.0 52.0
6 A.Jones GB 3.0 10.4
7 A.Jones GB 4.0 0.0
因此,当我合并时,我将保留down == 4
中的df1
数据,就像这样(请看索引7):
merged = pd.merge(df1,'posteam,'down])
name posteam down rush passes
0 A.Ekeler LAC 1.0 35.7 122.8
1 A.Ekeler LAC 2.0 15.1 63.2
2 A.Ekeler LAC 3.0 15.9 39.0
3 A.Ekeler LAC 4.0 0.4 -1.0
4 A.Jones GB 1.0 105.1 43.7
5 A.Jones GB 2.0 79.2 52.0
6 A.Jones GB 3.0 8.1 10.4
7 A.Jones GB 4.0 1.0 0.0
我尝试将down
从合并中删除,但这使一切搞砸了
解决方法
您应该尝试
merged_df = pd.merge(df1,df2,how='outer',on=['name','posteam','down']).fillna(value=0.0)