我有几个类似结构的熊猫数据存储在字典中。我以以下方式访问数据帧。
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,以创建一个新的dataframe,然后重新合并到它上。我需要合并的数据文件的数量在4到10之间,所以我需要一种自动的方法(因此我认为一个通过的数据集可能有效)。
在这方面的任何帮助都会令人难以置信的感激。
发布于 2016-01-25 04:41:28
您可以使用一个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在注释中指出的那样,如果将join列设置为数据格式的索引,则可以使用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发布于 2016-01-25 07:01:05
您可以在date列上使用多个合并:
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一些说明:首先,将df1和df2合并到列date上,并加入outer。您与具有相同属性的df3合并得到的数据文件。最后,为您的结果数据设置索引date。如果您的数据文件以date列作为索引,您可以首先对每个列执行reset_index,然后在包含date的列名上进行合并。
https://stackoverflow.com/questions/34984985
复制相似问题