合并和填充 Pandas DataFrame

Posted

技术标签:

【中文标题】合并和填充 Pandas DataFrame【英文标题】:Merging and Filling in Pandas DataFrames 【发布时间】:2014-09-25 00:23:39 【问题描述】:

我在 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】:

通常在这些情况下最容易做到:

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

【讨论】:

谢谢!那太完美了。

以上是关于合并和填充 Pandas DataFrame的主要内容,如果未能解决你的问题,请参考以下文章

使用不同的时间间隔合并并填充Pandas中的两个数据帧

Pandas:合并两个 1D DataFrame,输出两列,并为唯一元素填充填充值

Pandas 将数据框与共享列合并,左右填充

Pandas读取excel合并单元格的正确姿势(openpyxl合并单元格拆分并填充内容)

合并 Pandas 数据框中的 2 列,用前一个值填充 NaN [重复]

python--pandas合并与连接