[英]How to rearrange table in pandas in a format suitable for analysis in R?
在大熊貓中:
df = pd.DataFrame({'row1':['a','b','a','a','b','b','a','b','b','a'], 'row2':['x','x','y','y','y','x','x','y','x','y'],'col':[1,2,1,2,2,1,2,1,1,2],'val':[34,25,22,53,33,19,42,38,33,61]})
p = pd.pivot_table(df,values='val',rows=['row1','row2'],cols='col')
col 1 2
row1 row2
a x 34 42
y 22 57
b x 26 25
y 38 33
是否可以在適合R中分析的數據框中重塑數據透視表,類型如下:
row1 row2 col val
a x 1 34
a y 1 22
a x 2 42
a y 2 57
b x 1 26
b y 1 38
b x 2 25
b y 2 33
一種方法是使用stack
:
In [11]: p.stack()
Out[11]:
row1 row2 col
a x 1 34
2 42
y 1 22
2 57
b x 1 26
2 25
y 1 38
2 33
dtype: int64
它沒有提供name屬性,因此您必須在重置索引時進行設置:
In [12]: df = p.stack().reset_index(name='val')
In [13]: df
Out[13]:
row1 row2 col val
0 a x 1 34
1 a x 2 42
2 a y 1 22
3 a y 2 57
4 b x 1 26
5 b x 2 25
6 b y 1 38
7 b y 2 33
你可以做:
>>> pd.melt(p.reset_index(), id_vars=['row1', 'row2'],
var_name='col', value_name='val')
row1 row2 col val
0 a x 1 34
1 a y 1 22
2 b x 1 26
3 b y 1 38
4 a x 2 42
5 a y 2 57
6 b x 2 25
7 b y 2 33
重置索引,使row1
和row2
列:
>>> p.reset_index()
col row1 row2 1 2
0 a x 34 42
1 a y 22 57
2 b x 26 25
3 b y 38 33
然后pd.melt
融化中的所有列,除了row1
和row2
( id_vars
參數)成一個名為val
( value_name
參數),並保持到列他們在指定的列所屬的信息col
( var_name
參數)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.