[英]Combine multiple dataframes into dataframe of multi-index columns
假设我有 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
列在哪里是多索引形式?
谢谢
使用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
编辑:对于像原始添加DataFrame.reindex
通过MultiIndex.from_product
从第一级MultiIndex
的唯一值的顺序:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.