比较两个相似的数据帧并填充一个数据帧的缺失值
Comparing two similar dataframes and filling in missing values of one dataframe
所以我有两个数据帧,一个是数据帧字典的单个数据帧 stocks['OPK']
,另一个只是一个简单的 Pandas 数据帧 df
。
这是 df 的一部分,df.loc['2010-01-04':, 'Open']
我很感兴趣与其他数据帧进行比较。
Date Open
2010-01-04 1.80
2010-01-05 1.64
2010-01-06 1.90
2010-01-07 1.79
2010-01-08 1.92
2010-01-11 1.90
2010-01-12 1.89
2010-01-13 1.82
2010-01-14 1.84
2010-01-15 1.85
2010-01-19 1.77
这是另一个数据框stocks['OPK'].Open
2010-01-04 1.80
2010-01-05 1.64
2010-01-06 NaN
2010-01-07 1.79
2010-01-08 NaN
2010-01-11 1.90
2010-01-12 1.89
2010-01-13 1.82
2010-01-14 NaN
2010-01-15 1.85
2010-01-19 NaN
如您所见,第二个数据框有缺失值。
由于两个索引都是日期时间格式,我希望能够将 stock['OPK'].Open
与 df.loc['2010-01-04':, 'Open']
进行比较,并用第一个数据帧 [=14] 中的值填充缺失值=]
我可以用这段代码做一个布尔过滤器,但我不知道如何从那里开始:
stocks['OPK'].Open == df.loc['2010-01-04':, 'Open']
pd.merge
及其各自选项的问题在于它似乎添加了额外的
列。我只想通过比较可能具有缺失值的另一个数据框来填充缺失值(如果有的话)。
谢谢。
您可以使用 fillna()
df2 = df2.fillna(df1)
另一种更快的方法是 combine_first
df2 = df2.combine_first(df1)
两者都会return
Date Open
0 2010-01-04 1.80
1 2010-01-05 1.64
2 2010-01-06 1.90
3 2010-01-07 1.79
4 2010-01-08 1.92
5 2010-01-11 1.90
6 2010-01-12 1.89
7 2010-01-13 1.82
8 2010-01-14 1.84
9 2010-01-15 1.85
10 2010-01-19 1.77
所以我有两个数据帧,一个是数据帧字典的单个数据帧 stocks['OPK']
,另一个只是一个简单的 Pandas 数据帧 df
。
这是 df 的一部分,df.loc['2010-01-04':, 'Open']
我很感兴趣与其他数据帧进行比较。
Date Open
2010-01-04 1.80
2010-01-05 1.64
2010-01-06 1.90
2010-01-07 1.79
2010-01-08 1.92
2010-01-11 1.90
2010-01-12 1.89
2010-01-13 1.82
2010-01-14 1.84
2010-01-15 1.85
2010-01-19 1.77
这是另一个数据框stocks['OPK'].Open
2010-01-04 1.80
2010-01-05 1.64
2010-01-06 NaN
2010-01-07 1.79
2010-01-08 NaN
2010-01-11 1.90
2010-01-12 1.89
2010-01-13 1.82
2010-01-14 NaN
2010-01-15 1.85
2010-01-19 NaN
如您所见,第二个数据框有缺失值。
由于两个索引都是日期时间格式,我希望能够将 stock['OPK'].Open
与 df.loc['2010-01-04':, 'Open']
进行比较,并用第一个数据帧 [=14] 中的值填充缺失值=]
我可以用这段代码做一个布尔过滤器,但我不知道如何从那里开始:
stocks['OPK'].Open == df.loc['2010-01-04':, 'Open']
pd.merge
及其各自选项的问题在于它似乎添加了额外的
列。我只想通过比较可能具有缺失值的另一个数据框来填充缺失值(如果有的话)。
谢谢。
您可以使用 fillna()
df2 = df2.fillna(df1)
另一种更快的方法是 combine_first
df2 = df2.combine_first(df1)
两者都会return
Date Open
0 2010-01-04 1.80
1 2010-01-05 1.64
2 2010-01-06 1.90
3 2010-01-07 1.79
4 2010-01-08 1.92
5 2010-01-11 1.90
6 2010-01-12 1.89
7 2010-01-13 1.82
8 2010-01-14 1.84
9 2010-01-15 1.85
10 2010-01-19 1.77