使用值将新的Datetime添加到Datetime Index Pandas数据框

时间:2018-07-22 20:23:25

标签: python pandas dataframe datetimeindex

这是我的第一个数据帧div

df1

现在我想添加7月21日,它位于另一个数据帧 Open High Low Close Date 2018-07-16 2797.360107 2801.189941 2793.389893 2798.429932 2018-07-17 2789.340088 2814.189941 2789.239990 2809.550049 2018-07-18 2811.350098 2816.760010 2805.889893 2815.620117 2018-07-19 2809.370117 2812.050049 2799.770020 2804.489990 2018-07-20 2804.550049 2809.699951 2800.010010 2801.830078 中,例如,

df2

现在我应该如何添加 Date Prediction 0 2018-07-25 2111.111 作为2018-07-21索引,并且与之对应的数据对于df1列应该为df2['Prediction'],否则其他列可以为0。

所以最终的df应该是这样的,

Close

2 个答案:

答案 0 :(得分:1)

只需添加另一行:

df.loc['2018-07-25', 'Close'] = 2111.111

在其他列中,您将看到大量关于NaN的信息。您可以根据需要用0填充它们:

df.fillna(0, inplace=True)

答案 1 :(得分:0)

方法1:pd.concat

您可以使用pd.concat,只需将df2列重命名以匹配df1中所需的列:

new_df = (pd.concat([df1,
                     df2.set_index('Date')
                     .rename(columns={'Prediction':'Close'})])
          .fillna(0)
          [df.columns])

>>> new_df
                   Open         High          Low        Close
Date                                                          
2018-07-16  2797.360107  2801.189941  2793.389893  2798.429932
2018-07-17  2789.340088  2814.189941  2789.239990  2809.550049
2018-07-18  2811.350098  2816.760010  2805.889893  2815.620117
2018-07-19  2809.370117  2812.050049  2799.770020  2804.489990
2018-07-20  2804.550049  2809.699951  2800.010010  2801.830078
2018-07-25     0.000000     0.000000     0.000000  2111.111000

方法2:merge

或者使用merge进行外部合并。您仍然需要更改df2中的列名称以匹配您希望列结束的位置

new_df = (df1.reset_index()
          .merge(df2.rename(columns={'Prediction':'Close'}),
                 how='outer')
          .fillna(0)
          .set_index('Date'))

>>> new_df
                   Open         High          Low        Close
Date                                                          
2018-07-16  2797.360107  2801.189941  2793.389893  2798.429932
2018-07-17  2789.340088  2814.189941  2789.239990  2809.550049
2018-07-18  2811.350098  2816.760010  2805.889893  2815.620117
2018-07-19  2809.370117  2812.050049  2799.770020  2804.489990
2018-07-20  2804.550049  2809.699951  2800.010010  2801.830078
2018-07-25     0.000000     0.000000     0.000000  2111.111000