在单个数据框中合并多个列和日期

时间:2018-01-05 17:21:38

标签: pandas dataframe

我的数据框如下所示

D1          P2open  D2          P2high  D3          P2low   D4          P2close
1/2/1997    1259    1/2/1997    1263    1/3/1997    1247    1/2/1997    1250
1/3/1997    1252    1/4/1997    1260    1/5/1997    1252    1/3/1997    1257
1/6/1997    1254    1/6/1997    1271    1/6/1997    1254    1/5/1997    1270
1/7/1997    1270    1/8/1997    1289    1/7/1997    1270    1/7/1997    1285
1/8/1997    1280    1/9/1997    1294    1/8/1997    1280    1/8/1997    1289
1/9/1997    1285    1/10/1997   1290    1/9/1997    1285    1/10/1997   1287

我只知道如何以这种方式合并,但我不知道如何扩展它以合并所有这些,你能告诉我吗?

df = df[['D9', 'P3close']].merge(df[['D4', 'P2close']], how='left', left_on='D9', right_on='D4')

想要的结果

    D1          P2open  P2high  P2low   P2close
    1/2/1997    1259    1263    nan     1250
    1/3/1997    1252    nan     1247    1257
    1/6/1997    1254    1271    1254    nan
    1/7/1997    1270    nan     1270    1285
    1/8/1997    1280    1289    1280    1289
    1/9/1997    1285    1294    1285    nan

他们都使用D1来合并

1 个答案:

答案 0 :(得分:0)

你可以把它们连在一起,虽然它很难看。如果有可能,您可以考虑以不同的方式存储数据。

df[['D1', 'P2open']].set_index('D1').merge(df[['D2', 'P2high']].set_index('D2'), how='left', left_index=True, right_index=True)\
    .merge(df[['D3', 'P2low']].set_index('D3'), how='left', left_index=True, right_index=True)\
    .merge(df[['D4', 'P2close']].set_index('D4'), how='left', left_index=True, right_index=True)

          P2open  P2high   P2low  P2close
D1
1/2/1997    1259  1263.0     NaN   1250.0
1/3/1997    1252     NaN  1247.0   1257.0
1/6/1997    1254  1271.0  1254.0      NaN
1/7/1997    1270     NaN  1270.0   1285.0
1/8/1997    1280  1289.0  1280.0   1289.0
1/9/1997    1285  1294.0  1285.0      NaN