Join 使用具有重叠列名的熊猫连接多个数据帧?
我有多个(2个以上)数据帧要合并。它们都共享相同的值列:Join 使用具有重叠列名的熊猫连接多个数据帧?,join,merge,pandas,Join,Merge,Pandas,我有多个(2个以上)数据帧要合并。它们都共享相同的值列: In [431]: [x.head() for x in data] Out[431]: [ AvgStatisticData DateTime 2012-10-14 14:00:00 39.335996 2012-10-14 15:00:00 40.210110 2012-10-14 16:00:00
In [431]: [x.head() for x in data]
Out[431]:
[ AvgStatisticData
DateTime
2012-10-14 14:00:00 39.335996
2012-10-14 15:00:00 40.210110
2012-10-14 16:00:00 48.282816
2012-10-14 17:00:00 40.593039
2012-10-14 18:00:00 40.952014,
AvgStatisticData
DateTime
2012-10-14 14:00:00 47.854712
2012-10-14 15:00:00 55.041512
2012-10-14 16:00:00 55.488026
2012-10-14 17:00:00 51.688483
2012-10-14 18:00:00 57.916672,
AvgStatisticData
DateTime
2012-10-14 14:00:00 54.171233
2012-10-14 15:00:00 48.718387
2012-10-14 16:00:00 59.978616
2012-10-14 17:00:00 50.984514
2012-10-14 18:00:00 54.924745,
AvgStatisticData
DateTime
2012-10-14 14:00:00 65.813114
2012-10-14 15:00:00 71.397868
2012-10-14 16:00:00 76.213973
2012-10-14 17:00:00 72.729002
2012-10-14 18:00:00 73.196415,
....etc
我了解到join可以处理多个数据帧,但是我得到:
In [432]: data[0].join(data[1:])
...
Exception: Indexes have overlapping values: ['AvgStatisticData']
我已尝试将
rsuffix=[%I”%(I)传递给范围内的I(len(data))]
以加入,但仍然得到相同的错误。我可以通过以列名不重叠的方式构建数据列表来解决这个问题,但也许有更好的方法 我会尝试pandas.merge
使用后缀=
选项
import pandas as pd
import datetime as dt
df_1 = pd.DataFrame({'x' : [dt.datetime(2012,10,21) + dt.timedelta(n) for n in range(10)], 'y' : range(10)})
df_2 = pd.DataFrame({'x' : [dt.datetime(2012,10,21) + dt.timedelta(n) for n in range(10)], 'y' : range(10)})
df = pd.merge(df_1, df_2, on='x', suffixes=['_1', '_2'])
我很想看看专家们是否有一种更具算法性的方法来合并数据帧列表。理想的结果是在DateTime索引上加入一行,例如第一行是(如果逗号与列分开):2012-10-14 14:00:00,39.335996,47.8854712,54.171233…等等
OK,我有点慢:)。我会尝试pandas.merge
而不是join
。这应该能让你熬过一个晚上,@KyleBrandt,但我很感兴趣的是专业人士是否有一个更干净的解决方案。问题是当然有超过20个,这是非常手动的。pandas.concat()
解决方案要好得多——我认为concat
在axis=1
时给出了重复的列名错误,但我有很多东西要学。:)如果索引只是部分重叠怎么办?
In [65]: pd.concat(data, axis=1)
Out[65]:
AvgStatisticData AvgStatisticData AvgStatisticData AvgStatisticData
2012-10-14 14:00:00 39.335996 47.854712 54.171233 65.813114
2012-10-14 15:00:00 40.210110 55.041512 48.718387 71.397868
2012-10-14 16:00:00 48.282816 55.488026 59.978616 76.213973
2012-10-14 17:00:00 40.593039 51.688483 50.984514 72.729002
2012-10-14 18:00:00 40.952014 57.916672 54.924745 73.196415