Python 将多个数据帧合并为多索引列的数据帧
假设我有3个数据帧Python 将多个数据帧合并为多索引列的数据帧,python,python-3.x,pandas,dataframe,multi-index,Python,Python 3.x,Pandas,Dataframe,Multi Index,假设我有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
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
列在何处为多索引形式
感谢您与和一起使用多索引进行排序:
#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
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
编辑:对于原始添加方式中的订单,从多索引第一级的唯一值开始:
#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
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
键后的swaplevel和sort index是否有错误?@finmathstudent-ya,它缺少一个
,
,很抱歉。如果我想指定内部级别列索引的顺序(“收入”、“其他收入”、“费用”),代码会是什么?而不是你选择的那种?@finmathstudent-给我一点时间。