[英]Pandas; tricky pivot table
我有一個pandas數據幀,我需要重塑/透視。 如何做到這一點似乎超越了我。 數據框如下所示:
Ref Statistic Val1 Val2 Val3 Val4
0 Mean 0 1 2 3
0 Std 0.1 0.1 0.1 0.1
1 Mean 0 1 2 3
1 Std 0.1 0.1 0.1 0.1
2 Mean 0 1 2 3
2 Std 0.1 0.1 0.1 0.1
而我的目標是達到這個目的:
Ref Values Mean Std
0 Val1 0 0.1
0 Val2 1 0.1
0 Val3 2 0.1
0 Val4 3 0.1
1 Val1 0 0.1
1 Val2 1 0.1
1 Val3 2 0.1
1 Val4 3 0.1
2 Val1 0 0.1
2 Val2 1 0.1
2 Val3 2 0.1
2 Val4 3 0.1
看起來這需要不止一個樞軸或者樞軸和groupby的組合,但我沒有運氣......
有任何想法嗎?
>>> df1 = pd.melt(df, value_vars=['Val1', 'Val2', 'Val3', 'Val4'],
... id_vars=['Statistic', 'Ref'], var_name='Values')
>>> df1.pivot_table(values='value', rows=['Ref', 'Values'], cols='Statistic')
Statistic Mean Std
Ref Values
0 Val1 0 0.1
Val2 1 0.1
Val3 2 0.1
Val4 3 0.1
1 Val1 0 0.1
Val2 1 0.1
Val3 2 0.1
Val4 3 0.1
2 Val1 0 0.1
Val2 1 0.1
Val3 2 0.1
Val4 3 0.1
[12 rows x 2 columns]
如果你不想擁有上面的MultiIndex
,你可以在最后一個數據幀上使用.reset_index
方法;
作為替代melt
,可以設置一個多指標和鏈stack
和unstack
命令:
import pandas
# from io import StringIO # python 3
from StringIO import StringIO # python 2
datastring = StringIO('''\
Ref Statistic Val1 Val2 Val3 Val4
0 Mean 0 1 2 3
0 Std 0.1 0.1 0.1 0.1
1 Mean 0 1 2 3
1 Std 0.1 0.1 0.1 0.1
2 Mean 0 1 2 3
2 Std 0.1 0.1 0.1 0.1
''')
df = pandas.read_table(datastring, sep='\s\s+', index_col=['Ref', 'Statistic'])
df.columns.names = ['Values']
df.stack(level='values').unstack(level='Statistic')
Statistic Mean Std
Ref Values
0 Val1 0 0.1
Val2 1 0.1
Val3 2 0.1
Val4 3 0.1
1 Val1 0 0.1
Val2 1 0.1
Val3 2 0.1
Val4 3 0.1
2 Val1 0 0.1
Val2 1 0.1
Val3 2 0.1
Val4 3 0.1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.