使熊猫具有多索引列的多个数据框并完全连接

Posted

技术标签:

【中文标题】使熊猫具有多索引列的多个数据框并完全连接【英文标题】:making pandas multiple data frames with multi-indexed columns and join altogether 【发布时间】:2020-12-03 14:08:09 【问题描述】:

有些人会说这需要是两个独立的问题,但它们是相互关联的,所以我把它们都写在这里。

1.制作多索引列

我有三个数据框:

data_large = pd.DataFrame("name":["a", "b", "c"], "sell":[10, 60, 50], "buy":[20, 30, 40])
data_mini = pd.DataFrame("name":["b", "c", "d"], "sell":[60, 20, 10], "buy":[30, 50, 40])
data_topix = pd.DataFrame("name":["a", "b", "c"], "sell":[10, 80, 0], "buy":[70, 30, 40])

但首先,我想让他们的列像下面那样被多索引。

这是我尝试过的,但没有按预期工作。 name 低于索引级别 Nikkei225Large

iterables = [['Nikkei225Large'], ['name', 'buy', 'sell']]
index_large = pd.MultiIndex.from_product(iterables, names=['product', 'sell_buy'])
data_large.columns = index_large

2。使用多索引列连接多个 pandas,例如。使用reduce

接下来,在name 列上将三个数据框一起外连接。预期的输出是:

目前,我只是使用reduce 加入他们,如下所示,但我想使用多索引列。

from functools import reduce
dfs = 0: data_large, 1: data_mini, 2: data_topix

def agg_df(dfList):
    df_agged = reduce(lambda left, right: pd.merge(left, right, 
                                                   left_index=True, right_index=True, 
                                                   on='name',
                                                   how='outer'), dfList)
    return df_agged

df_final = agg_df(dfs.values())

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

IIUC,您可以使用 pd.concatkeys 参数来做到这一点:

df_out = pd.concat([dfi.set_index('name') for dfi in [data_large, data_mini, data_topix]], 
                   keys=['Nikkei225Large', 'Nikkei225Mini', 'Topix'], axis=1)\
           .rename_axis(index=['Name'], columns=['product','buy_sell'])

输出:

product  Nikkei225Large       Nikkei225Mini       Topix      
buy_sell           sell   buy          sell   buy  sell   buy
Name                                                         
a                  10.0  20.0           NaN   NaN  10.0  70.0
b                  60.0  30.0          60.0  30.0  80.0  30.0
c                  50.0  40.0          20.0  50.0   0.0  40.0
d                   NaN   NaN          10.0  40.0   NaN   NaN

【讨论】:

以上是关于使熊猫具有多索引列的多个数据框并完全连接的主要内容,如果未能解决你的问题,请参考以下文章

将 Pandas 数据帧与多索引列和不规则时间戳连接起来

如何将熊猫数据框多索引列移动到 2 行

如何应用于具有多索引列的数据框中的一组列

熊猫多索引数据框合并问题

如何将多索引列转换为熊猫数据框的单索引列?

具有多索引列的 Pandas groupby