Python熊猫连接到多索引groupby



我是熊猫的新手,需要帮助。我有以下两份报告,内容很简单。

$ cat test_report1
ID;TYPE;VAL
1;USD;5
2;EUR;10
3;PLN;3
$ cat test_report2
ID;TYPE;VAL
1;USD;5
2;EUR;10
3;PLN;1

然后我使用concat连接两个具有唯一索引的报告:

A=pd.read_csv('test_report1', delimiter=';', index_col=False)
B=pd.read_csv('test_report2', delimiter=';', index_col=False)
C=pd.concat([A.set_index('ID'), B.set_index('ID')], axis=1, keys=['PRE','POST'])
print(C)

这给了我以下输出:

PRE     POST
TYPE VAL TYPE VAL
ID
1         USD   5  USD   5
2         EUR  10  EUR  10
3         PLN   3  PLN   1

我觉得这很好,但实际上我更想拥有:

STATE TYPE VAL
ID
1         PRE  USD  5  
POST USD  5
2         PRE  EUR  10
POST EUR  10
3         PRE  PLN  3  
POST PLN  1

然后它将是完美的diff像:

STATE TYPE VAL
ID
1         PRE  Nan  Nan
POST Nan  Nan
2         PRE  Nan  Nan
POST Nan  Nan
3         PRE  PLN  3  
POST PLN  1

我知道这是可行的,但我一直在挖掘第三天找到解决方案。

DataFrame.rename_axisDataFrame.stack一起使用,然后对MultiIndex:的级别进行排序

df = (df.rename_axis(['STATE',None], axis=1)
.stack(0)
.sort_index(level=[0,1], ascending=[True, False])
)
print (df)
TYPE  VAL
ID STATE          
1  PRE    USD    5
POST   USD    5
2  PRE    EUR   10
POST   EUR   10
3  PRE    PLN    3
POST   PLN    1

最新更新