Pandas在其相似列(即索引)上合并2个数据帧

时间:2018-05-09 09:14:06

标签: python pandas dataframe

我有两个数据帧,我碰巧设置了#time; timeStamp'作为指数。 df_1.set_index('timeStamp', inplace=True)

df_1

                     value
timeStamp                 
2016-11-23 20:00:00  37.21
2016-11-23 21:00:00  37.79
2016-11-23 22:00:00  33.99
2016-11-23 23:00:00  32.66
2016-11-24 00:00:00  31.61

df_2

                     value
timeStamp                 
2016-11-23 23:00:00  32.92
2016-11-24 00:00:00  31.54
2016-11-24 01:00:00  29.14

我想在共享时间时制作一个比较两个值的数据帧。我尝试了combined_df= pd.merge(df_real, df_fc, on='timeStamp', how='inner')并获得了key error

因此,我没有在索引上合并两个数据帧,而是保留了没有' timeStamp'的数据帧。作为他们的索引。例如。

df我用来合并

             timeStamp  value
0  2016-11-23 20:00:00  37.21
1  2016-11-23 21:00:00  37.79
2  2016-11-23 22:00:00  33.99
3  2016-11-23 23:00:00  32.66
13 2016-11-24 00:00:00  31.61

然后我能够合并并设置了我的新df(如下所示)。然后我也将索引设置为时间戳,稍后再开始。

            timeStamp  value_x  value_y 
0  2016-11-23 23:00:00    32.66    32.92 

我的问题为什么我无法合并指定为索引的列名?我想将该合并设置为新的数据帧...

4 个答案:

答案 0 :(得分:1)

我相信你可以在索引上合并。您似乎使用了错误的语法。您应该尝试使用onleft_index,而不是指定right_index

请参阅documentation for merges here

答案 1 :(得分:1)

您需要表明您正在合并索引:

pd.merge(df_1, df_2, left_index=True, right_index=True, how='inner')

答案 2 :(得分:1)

DataFrame加入/合并

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
         left_index=False, right_index=False, sort=True,
         suffixes=('_x', '_y'), copy=True, indicator=False,
         validate=None)

https://pandas.pydata.org/pandas-docs/stable/merging.html

答案 3 :(得分:0)

试试这个:

df_real.merge(df_fc, on='timeStamp', how='inner')

测试代码:

import pandas as pd
d = {'time1': ['A', 'B'], 'val1': [2, 4]}
df = pd.DataFrame(data=d)
df.set_index('time1')

d1 = {'time1': ['A', 'B','C'], 'val1': [5, 6, 9]}
df2 = pd.DataFrame(data=d1)
df2.set_index('time1')

df.merge(df2, on = 'time1')

输出是:

    time1   val1_x  val1_y
  0    A       2      5
  1    B       4      6