首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用非唯一索引合并多个熊猫数据集

用非唯一索引合并多个熊猫数据集
EN

Stack Overflow用户
提问于 2016-01-25 04:14:29
回答 2查看 1.1K关注 0票数 1

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

代码语言:javascript
复制
ex_dict[df1]
date        df1price1   df1price2
10-20-2015     100         150
10-21-2015      90         100

我想将所有这些数据按日期合并成一个数据格式。日期是重叠的,但并不是所有的数据都包括所有的日期。

我要从这开始

代码语言:javascript
复制
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

对此:

代码语言:javascript
复制
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,以创建一个新的dataframe,然后重新合并到它上。我需要合并的数据文件的数量在4到10之间,所以我需要一种自动的方法(因此我认为一个通过的数据集可能有效)。

在这方面的任何帮助都会令人难以置信的感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-25 04:41:28

您可以使用一个concat和一个groupby('date')来扁平结果。

代码语言:javascript
复制
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在注释中指出的那样,如果将join列设置为数据格式的索引,则可以使用concat(axis=1)

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2016-01-25 07:01:05

您可以在date列上使用多个合并:

代码语言:javascript
复制
df1.merge(df2, on='date', how='outer').merge(df3, on='date', how='outer').set_index('date')

In [107]: df1.merge(df2, on='date', how='outer').merge(df3, on='date', how='outer').set_index('date')
Out[107]:
            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

一些说明:首先,将df1df2合并到列date上,并加入outer。您与具有相同属性的df3合并得到的数据文件。最后,为您的结果数据设置索引date。如果您的数据文件以date列作为索引,您可以首先对每个列执行reset_index,然后在包含date的列名上进行合并。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34984985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档