繁体   English   中英

将数据框与分层索引合并?

[英]Merging dataframes with hierarchcial index?

问题

  • 如何使用分层索引合并两个数据框?
  • 我的数据框的索引是datetime.datetimedatetime.time

代码示例

import pandas as pd
import numpy as np
import datetime

BTC_df = pd.DataFrame(np.array([[datetime.time(19,15,0),1.05,'BTC'],[datetime.time(9,20,0),1.2,'BTC']]),
                      columns = ['time','return','coin'],
                      index = [[datetime.date(2020,5,1), datetime.date(2020,5,2)]])

ETH_df = pd.DataFrame(np.array([[datetime.time(8,30,0),1.1,'ETH'],[datetime.time(17,30,0),0.9,'ETH']]),
                      columns = ['time','return','coin'],
                      index = [[datetime.date(2020,5,1), datetime.date(2020,5,2)]])

BTC_df 
>>>               time    return   coin
   2020-05-01   19:15:00    1.05    BTC
   2020-05-02   09:20:00    1.2     BTC

ETH_df 
>>>                time    return   coin
   2020-05-01   08:30:00    1.1     ETH
   2020-05-02   17:30:00    0.9     ETH

我想要的output如下,使用分层索引(MultiIndex)

merged_df
>>>               time    return   coin
   2020-05-01   08:30:00    1.1     ETH
                19:15:00    1.05    BTC
   2020-05-02   09:20:00    1.2     BTC
                17:30:00    0.9     ETH

您可以使用pd.concat并使用df.sort_values对它们进行排序。

df = pd.concat([BTC_df,ETH_df])
df.rename_axis('Date').sort_values(by=['Date','time'])

                time return coin
Date
2020-05-01  08:30:00    1.1  ETH
2020-05-01  19:15:00   1.05  BTC
2020-05-02  09:20:00    1.2  BTC
2020-05-02  17:30:00    0.9  ETH

您可以使用set_indexappend来腾出time

pd.concat([BTC_df,ETH_df]).set_index('time',append=True).sort_index()

Output:

                    return coin
           time                
2020-05-01 08:30:00    1.1  ETH
           19:15:00   1.05  BTC
2020-05-02 09:20:00    1.2  BTC
           17:30:00    0.9  ETH
pd.concat([BTC_df,ETH_df]).sort_values(by='time', ascending=True)

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM