将多个数据框组合成多索引列的数据框
Posted
技术标签:
【中文标题】将多个数据框组合成多索引列的数据框【英文标题】:Combine multiple dataframes into dataframe of multi-index columns 【发布时间】:2021-06-10 10:39:37 【问题描述】:假设我有 3 个数据框,
df_1
代表收入
Year TSLA MSFT AVY
2019 851 200 112.8
2018 725 150 92.6
df_2
代表其他一些收入
Year TSLA MSFT AVY
2019 10 13 17
2018 11 14 18
和df_3
代表费用
Year TSLA MSFT AVY
2019 110 213 317
2018 111 214 418
获取以下df的代码可能是什么?
TSLA MSFT AVY
Year revenues other_revenues expenses revenues other_revenues expenses revenues other_revenues expenses
2019 851 10 110 200 13 213 112.8 17 317
2018 725 11 111 150 14 214 92.6 18 418
多索引形式的列在哪里?
谢谢
【问题讨论】:
【参考方案1】:使用concat
与DataFrame.swaplevel
和DataFrame.sort_index
对MultiIndex
进行排序:
#if not Year is index first create it
L = [x.set_index('Year') for x in [df_1, df_2, df_3]]
df = (pd.concat(L,
axis=1,
keys=('evenues', 'other_revenues', 'expenses'))
.swaplevel(1, 0, axis=1)
.sort_index(axis=1))
print (df)
AVY MSFT TSLA \
evenues expenses other_revenues evenues expenses other_revenues evenues
Year
2019 112.8 317 17 200 213 13 851
2018 92.6 418 18 150 214 14 725
expenses other_revenues
Year
2019 110 10
2018 111 11
编辑:对于原始订单中的订单,请从MultiIndex
的第一级唯一值中添加MultiIndex.from_product
DataFrame.reindex
:
sub = ['revenues', 'other_revenues', 'expenses']
L = [x.set_index('Year') for x in [df_1, df_2, df_3]]
df = (pd.concat(L,
axis=1,
keys=sub)
.swaplevel(1, 0, axis=1))
mux = pd.MultiIndex.from_product([df.columns.levels[0], sub])
df = df.reindex(mux, axis=1)
print (df)
TSLA MSFT \
revenues other_revenues expenses revenues other_revenues expenses
Year
2019 851 10 110 200 13 213
2018 725 11 111 150 14 214
AVY
revenues other_revenues expenses
Year
2019 112.8 17 317
2018 92.6 18 418
【讨论】:
key 之后的交换级别和排序索引是否有错误? @finmathstudent - 是的,它缺少一个'
,抱歉。
如果我想为内层列索引指定顺序('revenues'、'other_revenues'、expenses'),代码是什么?而不是你选择的那种?
@finmathstudent - 稍等。以上是关于将多个数据框组合成多索引列的数据框的主要内容,如果未能解决你的问题,请参考以下文章