我在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函数来提供我想要的东西。
答案 0 :(得分:3)
在这种情况下通常最容易做到:
df_together = pd.concat([df1, df2]).groupby('key').max()