我想合并2个具有相同行数的数据帧,而不考虑每行的时间戳。 我只是希望数据并排(它们已经排序)。 我试图摆脱时间戳,然后连接数据帧,但是没有成功。
这是第一个数据帧(如终端所示):
Open High
Timestamp
2019-04-11 04:00:00+00:00 5143.50 5191.64
2019-04-11 05:00:00+00:00 5180.18 5183.11
这是第二个数据帧:
Open_2h High_2h
Timestamp
2019-04-11 04:00:00+00:00 5100 5300
2019-04-11 06:00:00+00:00 5200 5400
这是我想要得到的结果:
Open High Open_2h High_2h
Timestamp
2019-04-11 04:00:00+00:00 5143.50 5191.64 5100 5300
2019-04-11 05:00:00+00:00 5180.18 5183.11 5200 5400
所以我尝试了以下代码:
result = pd.DataFrame()
df1.reset_index()
df2.reset_index()
result = pd.concat([df1, df2], axis=1 , sort=False)
我也尝试过:
result = pd.DataFrame()
df1.reset_index()
df2.reset_index()
result = df1.join(df2)
我还预先尝试在df1和df2中强制使用新索引:
indexlist = list(range(0,2))
df1.loc[:,'Index'] = indexlist
df1.set_index('Index')
df2.loc[:,'Index'] = indexlist
df2.set_index('Index')
但是时间戳数据仍然是熊猫进行“ join”或“ concatenate”操作所依赖的索引。
使用上面的任何代码,这就是我得到的:
Open High Open_2h High_2h
Timestamp
2019-04-11 04:00:00+00:00 5143.50 5191.64 5100 5300
2019-04-11 05:00:00+00:00 5180.18 5183.11 NaN NaN
2019-04-11 06:00:00+00:00 NaN NaN 5200 5400
我尝试了下面指示的merge_asof解决方案,但是使用以下数据,出现重复的行:
df1
Open High
Timestamp
2019-04-11 03:00:00+00:00 3000 3100
2019-04-11 04:00:00+00:00 4000 4100
2019-04-11 05:00:00+00:00 5000 5100
df2
Open_2h High_2h
Timestamp
2019-04-11 00:00:00+00:00 0500 0600
2019-04-11 02:00:00+00:00 2500 2600
2019-04-11 04:00:00+00:00 4500 4600
我得到:
Open High Open_2h High_2h
Timestamp
2019-04-11 03:00:00+00:00 3000 3100 2500 2600
2019-04-11 04:00:00+00:00 4000 4100 4500 4600
2019-04-11 05:00:00+00:00 5000 5100 4500 4600
两个数据帧之间的时间戳仍然保持同步,并且在df2中找不到相应的timpestamp时,将复制先前的值。
有人可以帮我摆脱这些数据帧的时间戳以进行这种串联吗?
在此先感谢您的帮助。
最诚挚的问候,
皮埃尔
答案 0 :(得分:1)
pd.merge_asof(df1.reset_index(),df2.reset_index(),on='Timestamp').set_index('Timestamp')
Open High Open_2h High_2h
Timestamp
2019-04-11 04:00:00+00:00 5143.50 5191.64 5100 5300
2019-04-11 05:00:00+00:00 5180.18 5183.11 5100 5300
如果您不希望考虑第二个df的索引:
df1.reset_index().combine_first(df2.reset_index(drop=True)).set_index('Timestamp')
High High_2h Open Open_2h
Timestamp
2019-04-11 04:00:00+00:00 5191.64 5300.0 5143.50 5100.0
2019-04-11 05:00:00+00:00 5183.11 5400.0 5180.18 5200.0
答案 1 :(得分:0)
您可以做到
df3 = pd.merge(df1.reset_index(),df2.reset_index(),how='outer',left_on=['Timestamp'],right_on=['Timestamp'])
答案 2 :(得分:0)
好的,我认为“ reset_index()”中缺少的部分是“ inplace = True”。 因此,以下代码可以完成这项工作:
df1.reset_index(drop=True, inplace=True)
df2.reset_index(drop=True, inplace=True)
result = df1.join(df2, sort=False)
Pffouuuhh 一个下午! ;)
感谢大家的帮助!
最好
皮埃罗特