合并和填充Pandas数据框

1 投票
1 回答
560 浏览
提问于 2025-04-18 15:41

我有两个Pandas的数据框,它们的列名是一样的,大小也相同,但里面的值不同,有些值还缺失。

我想根据一个关键列来合并这两个数据框,并且在每一行中选择最大值或者非缺失的数据。

import pandas as pd
import numpy as np

df1 = pd.DataFrame({'key':[1,3,5,7], 'a':[np.NaN, 0, 5, 1], 'b':[datetime.datetime.today() - datetime.timedelta(days=x) for x in range(0,4)]})
df1
    a                          b  key
0 NaN 2014-08-01 10:37:23.828683    1
1   0 2014-07-31 10:37:23.828726    3
2   5 2014-07-30 10:37:23.828736    5
3   1 2014-07-29 10:37:23.828744    7

df2 = pd.DataFrame({'key':[1,3,5,7], 'a':[2, 0, np.NaN, 3], 'b':[datetime.datetime.today() - datetime.timedelta(days=x) for x in range(2,6)]})
df2.ix[2,'b']=np.NaN
df2
    a                          b  key
0   2 2014-07-30 10:38:13.857203    1
1   0 2014-07-29 10:38:13.857253    3
2 NaN                        NaT    5
3   3 2014-07-27 10:38:13.857272    7

最终的结果应该是这样的:

df_together
    a                          b  key
0   2 2014-07-30 10:38:13.857203    1
1   0 2014-07-29 10:38:13.857253    3
2   5 2014-07-30 10:37:23.828736    5
3   3 2014-07-27 10:38:13.857272    7

我希望我的例子能涵盖所有情况。如果两个数据框都有NaN(或者NaT)值,那么结果也应该有NaN(或者NaT)值。无论我怎么尝试,我都无法让pd.merge函数得到我想要的结果。

1 个回答

3

在这种情况下,通常最简单的方法是这样做:

df_together = pd.concat([df1, df2]).groupby('key').max()

撰写回答