pd.concat()不在同一索引上合并

时间:2018-10-23 11:39:39

标签: python python-3.x pandas dataframe

我有一个包含称为fcst的预测的df,如下所示:

             yhat        yhat_lower  yhat_upper
ds          
2015-08-31  -0.443522   -19.067399  17.801234
2015-09-30  6.794625    -31.472186  46.667981
...

进行此转换后:

fcst2 = fcst["yhat"].to_frame().rename(columns={"yhat":"test1"})
fcst3 = fcst["yhat"].to_frame().rename(columns={"yhat":"test2"})

我想在日期索引上将它们串联起来:

pd.concat([fcst2,fcst3])

但是我收到一个在索引上未对齐的数据框:

             test1     test2
ds      
2015-08-31  -0.443522   NaN
2015-09-30  6.794625    NaN
... ... ...
2017-05-31  NaN 95.563262
2017-06-30  NaN 85.829916

尽管如此:

(fcst2.index == fcst3.index).any()

返回True。

我的问题是:为什么两个数据帧没有在索引上并置,我该怎么办呢?

我知道join函数,但是由于我打算添加的其他一些数据框中缺少某些日期,因此我相信concat函数可能会更好。

谢谢!

2 个答案:

答案 0 :(得分:2)

concat设置为axis的情况下呼叫1

pd.concat([df1, df2], axis=1)

答案 1 :(得分:1)

它不起作用,因为pd.concat具有参数axis=0的默认值。因此,您可以按照Dominique Paul的建议用axis=1调用该函数,也可以改用join函数。举一个例子:

# data to create the dataframes with
data_1 = [1,2,3,4,5]
index_1 = ['a','b','c','d','e']
data_2 = [6,7,8,9,10]
index_2 = ['b','d','e','a','c']

# create dataframes
df_1 = pd.DataFrame({'data_1':data_1, 'new_index':index_1})
df_2 = pd.DataFrame({'data_2':data_2, 'new_index':index_2})

# setting new index to test unaligned indexes
df_1.set_index('new_index', inplace=True, drop=True)
df_2.set_index('new_index', inplace=True, drop=True)

# join operation is performed on indexes
df_1.join(df_2)