我是熊猫的新手,需要帮助。我有以下两份报告,内容很简单。
$ 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_axis
与DataFrame.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