[英]Python Pandas: Transpose or Stack?
你好,我有一個示例數據框如下。 我無法通過轉置獲得所需的結果....
x = ('P', 'P', 'O', 'DNP', 'D')
y = ('O', 'O', 'D', 'DNP', 'DNP')
z = ('P', 'P', 'O', 'U', 'DNP')
a = ('O', 'O', 'D', 'DNP', 'DNP')
b = ('P', 'DNP', 'O', 'U', 'DNP')
ID = ['ID1', 'ID2', 'ID3', 'ID4', 'ID5']
df = DataFrame(zip(ID, a, b, x, y, z), columns = ['id', 'a', 'b', 'x', 'y', 'z'])
id a b x y z
0 ID1 O P P O P
1 ID2 O DNP P O P
2 ID3 D O O D O
3 ID4 DNP U DNP DNP U
4 ID5 DNP DNP D DNP DNP
一個簡單的df.transpose()產生......
0 1 2 3 4
id ID1 ID2 ID3 ID4 ID5
a O O D DNP DNP
b P DNP O U DNP
x P P O DNP D
y O O D DNP DNP
z P P O U DNP
所需的輸出如下....
ID1 a O
ID1 b P
ID1 x P
ID1 y O
ID1 z P
ID2 a O
ID2 b DNP
ID2 x P
ID2 y O
ID2 z P
等等.....我感謝任何幫助!
你可以使用pd.melt
:
In [23]: pd.melt(df, id_vars=['id'], var_name='colvals', value_name='DOPU')
Out[23]:
id colvals DOPU
0 ID1 a O
1 ID2 a O
2 ID3 a D
...
21 ID2 z P
22 ID3 z O
23 ID4 z U
24 ID5 z DNP
或者,您可以在調用stack
之前將id
設置為索引:
In [21]: df.set_index('id').stack()
Out[21]:
id
ID1 a O
b P
x P
y O
z P
...
ID5 a DNP
b DNP
x D
y DNP
z DNP
dtype: object
stack
將列級值移動到索引中。 由於期望的結果也在索引中具有id
值,因此使用set_index
首先將id
列移動到索引中然后調用stack
是很自然的。
調用reset_index
將索引級別移動到DataFrame列:
In [164]: df.columns.name = 'colvals'
In [165]: df.set_index('id').stack().reset_index()
Out[165]:
id colvals 0
0 ID1 a O
1 ID1 b P
2 ID1 x P
3 ID1 y O
4 ID1 z P
...
20 ID5 a DNP
21 ID5 b DNP
22 ID5 x D
23 ID5 y DNP
24 ID5 z DNP
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.