python - 使用非唯一索引合并多个 pandas 数据集

标签 python pandas merge concatenation

我有几个类似结构的 pandas 数据帧存储在字典中。我通过以下方式访问数据框。

ex_dict[df1]
date        df1price1   df1price2
10-20-2015     100         150
10-21-2015      90         100

我想按日期将所有这些数据帧合并到一个数据帧中。日期重叠,但并非所有数据帧都包含所有日期。

我需要离开这里

df1
date        df1price1   df1price2
10-20-2015     100         150
10-21-2015      90         100
10-22-2015     100         140

df2
date        df2price1   df2price2
10-20-2015     110         140
10-21-2015      90         110
10-23-2015     110         120

df3
date        df3price1   df3price2
10-20-2015     100         150
10-22-2015      90         100
10-23-2015      80         130

对此:

df_all
date        df1price1   df1price2 ... df3price1   df3price2
10-20-2015     100         150    ...    100         150
10-21-2015      90         100    ...    NaN         NaN
10-22-2015     100         140    ...     90         100
10-23-2015     NaN         NaN    ...     80         130

我已经尝试了很多东西,但我无法让它工作,除非一次重复合并 2 个数据帧以创建一个新的数据帧,然后重新合并到该数据帧上。我需要合并的数据帧数量在 4 到 10 之间变化,所以我需要一种方法来自动执行此操作(因此我认为传递字典可能会起作用)。

对此的任何帮助都将非常感激。

最佳答案

您可以使用 concat 后跟 groupby('date') 来展平结果。

In [22]: pd.concat([df1,df2,df3]).groupby('date').max()
Out[22]:
            df1price1  df1price2  df2price1  df2price2  df3price1  df3price2
date
10-20-2015        100        150        110        140        100        150
10-21-2015         90        100         90        110        NaN        NaN
10-22-2015        100        140        NaN        NaN         90        100
10-23-2015        NaN        NaN        110        120         80        130

编辑:正如 BrenBarn 在评论中指出的那样,如果将连接列设置为数据帧的索引,则可以使用 concat(axis=1):

df1.index = df1.date
df2.index = df2.date
df3.index = df3.date

In [44]: pd.concat([df1,df2,df3],axis=1)
Out[44]:
                  date  df1price1  df1price2        date  df2price1  \
10-20-2015  10-20-2015        100        150  10-20-2015        110
10-21-2015  10-21-2015         90        100  10-21-2015         90
10-22-2015  10-22-2015        100        140         NaN        NaN
10-23-2015         NaN        NaN        NaN  10-23-2015        110

            df2price2        date  df3price1  df3price2
10-20-2015        140  10-20-2015        100        150
10-21-2015        110         NaN        NaN        NaN
10-22-2015        NaN  10-22-2015         90        100
10-23-2015        120  10-23-2015         80        130

关于python - 使用非唯一索引合并多个 pandas 数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34984985/

相关文章:

python - Tensorflow: 'tensorflow.python.training' 的文档在哪里?

python - Spyder IDE 编辑器多行字符串查询(Python 3.6)

python - 为每个 plt.step 行指定不同的颜色

python - 使用 key 合并两个 Pandas 系列

Python:对图像中的对象进行分类

python - 为什么这个解决方案的复杂度为 O(nlogn)?

python Pandas 数据框: need speed up process related to calculate 3 rows data

r - 合并具有可预测拼写错误的数据框

git - 将两个 git 存储库 merge 为一个而不重命名文件

python - 为什么 random.randint() 比 random.getrandbits() 慢得多