如何在Pandas中重塑或透视DataFrame
我想在Pandas中重新调整一个数据表的形状,但不太确定该怎么做。以下是我现在的表格:
Phase Weight Value CF
AA heavy 0.28 1.0
AB light 3.26 1.0
BX med 0.77 1.0
XY x light -0.01 1.0
AA heavy 0.49 1.5
AB light 5.10 1.5
BX med 2.16 1.5
XY x light 0.98 1.5
AA heavy 2.48 2.0
AB light 11.70 2.0
BX med 5.81 2.0
XY x light 3.46 2.0
我想调整成这样的格式:
Phase Weight 1.0 1.5 2.0
AA heavy 0.28 0.49 2.48
AB light 3.26 5.10 11.70
BX med 0.77 2.16 5.81
XY x light -0.01 0.98 3.46
在新的表格中,列名变成了原来CF列中的值,而行和列交叉的地方则是原表中值列的值。
我知道可以用Phase列作为索引来实现,像这样:
df.pivot(index='Phase', columns='CF', values='Value)
但这样我就会丢失weight列。我尝试过这样做,但出现了错误:
df.pivot(index='Phase', columns=['Weight','CF'], values='Value')
有没有办法用一个简单的语句来完成这个?如果不行,最好的方法是什么呢?
1 个回答
4
你可以使用 pd.pivot_table
,这个函数可以接受多个名称作为索引或列的参数。我觉得你可能想把“Weight”放在索引上(这样它在输出中就会变成一列),而不是放在列上(那样不同的值就会变成列)。
In [27]: df.pivot_table(index=['Phase','Weight'], columns='CF', values='Value').reset_index()
Out[27]:
CF Phase Weight 1.0 1.5 2.0
0 AA heavy 0.28 0.49 2.48
1 AB light 3.26 5.10 11.70
2 BX med 0.77 2.16 5.81
3 XY x light -0.01 0.98 3.46
编辑:
在你提到的另一个问题中,DataFrame 的 .columns
是一个索引(就像行一样),它除了实际的值之外,还有一个 .name
。据我所知,这个名字一般是用来显示的。
In [74]: df.columns
Out[74]: Index([u'Phase', u'Weight', 1.0, 1.5, 2.0], dtype='object')
In [75]: df.columns.name
Out[75]: 'CF'
In [76]: df.columns.values
Out[76]: array(['Phase', 'Weight', 1.0, 1.5, 2.0], dtype=object)