使熊猫具有多索引列的多个数据框并完全连接
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.concat
和 keys
参数来做到这一点:
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
【讨论】:
以上是关于使熊猫具有多索引列的多个数据框并完全连接的主要内容,如果未能解决你的问题,请参考以下文章