python - 合并和填充 Pandas DataFrames

标签 python python-2.7 pandas merge dataframe

我在 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 函数提供我想要的东西。

最佳答案

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

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

关于python - 合并和填充 Pandas DataFrames,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25086316/

相关文章:

python - matplotlib barplot,在条形中间设置 xticklabels 的通用方法

python - 组合关系

python - 打印多线程子进程

python dask dataframe将元组列拆分为两列

python - 从 pandas 中的 csv 解析日期时间不会产生 DateTimeIndex

python - 将 Pandas 日期列转换为经过的秒数

python - 禁用 tkinter ttk 缩放小部件

python - 我的 django 应用程序的 settings.py 文件中的这段代码有什么问题?

python - 在 NLTK 解析器语法中混合单词和 PoS 标签

python - 以相反顺序应用 Python Pandas 指数加权平均值