Python 这叫什么:融化?旋转?重塑?

Python 这叫什么:融化?旋转?重塑?,python,pandas,Python,Pandas,这是一个关于在Python中使用pandas和ggplot的问题,但是如果您能给出一个R答案,我们将不胜感激 我试图绘制一些timeseries数据,这些数据看起来有点像下面所示。十、 Y、Z是井板ID(实验名称),0、1、2是不同的时间。我希望能够在不同的窗格/子地块/面中,以及在相同的面中,但使用不同的颜色,将时间过程绘制为线图 X Y Z 0 0.1 0.2 0.3 1 1.1 1.2 1.3 2 2.1 2.2 2.3 我知道熊猫和ggplot的结合

这是一个关于在Python中使用pandas和ggplot的问题,但是如果您能给出一个R答案,我们将不胜感激

我试图绘制一些timeseries数据,这些数据看起来有点像下面所示。十、 Y、Z是井板ID(实验名称),0、1、2是不同的时间。我希望能够在不同的窗格/子地块/面中,以及在相同的面中,但使用不同的颜色,将时间过程绘制为线图

   X    Y    Z
0  0.1  0.2  0.3
1  1.1  1.2  1.3
2  2.1  2.2  2.3
我知道熊猫和ggplot的结合会让我这么说

from ggplot import *
ggplot(aes(x='T', y='value', color='well'), data = df) + geom_line()

如果df看起来像这样

well  T   value
X     0   0.1
X     1   1.1
X     2   2.1
Y     0   0.2
Y     1   1.2
Y     2   2.2
Z     0   0.3
Z     1   1.3
Z     2   2.3  
,行不一定按该顺序排列

我的问题是,如何将上面的数据框转换成代码下面的数据框,这个操作叫什么?同样,我主要对Python中的pandas和ggplot感兴趣,但是关于如何在R中实现这一点的答案也非常有用

如果有人能推荐一个好的资源来学习如何使用数据做这些事情,我也将不胜感激。

试试这个

df1 = df.T.stack().reset_index().rename(columns = {'level_0': 'well', 'level_1': 'T', 0: 'value'})


    well    T   value
0   X       0   0.1
1   X       1   1.1
2   X       2   2.1
3   Y       0   0.2
4   Y       1   1.2
5   Y       2   2.2
6   Z       0   0.3
7   Z       1   1.3
8   Z       2   2.3

它被称为使用pivot或Melling等方法重塑数据帧,可以包括堆栈和取消堆栈、pivot_表和各种其他方法

从“宽”到“长” 您可以使用
stack
reset\u index
等方法将其重塑为长数据帧:

df2 = df.stack().reset_index()
df2.columns = ['T','well','value']
print(df2)

   T well  value
0  0    X    0.1
1  0    Y    0.2
2  0    Z    0.3
3  1    X    1.1
4  1    Y    1.2
5  1    Z    1.3
6  2    X    2.1
7  2    Y    2.2
8  2    Z    2.3
或使用
melt

df.reset_index().rename(columns={'index':'T'}).melt(id_vars='T').sort_values(by='T')

   T well  value
0  0    X    0.1
3  0    Y    0.2
6  0    Z    0.3
1  1    X    1.1
4  1    Y    1.2
7  1    Z    1.3
2  2    X    2.1
5  2    Y    2.2
8  2    Z    2.3
从“长”到“宽” 使用
pivot

df2.pivot(index='T',columns='well')

     value          
well     X    Y    Z
T                   
0      0.1  0.2  0.3
1      1.1  1.2  1.3
2      2.1  2.2  2.3
使用
设置索引
取消堆栈

df2.set_index(['T','well']).unstack()

     value          
well     X    Y    Z
T                   
0      0.1  0.2  0.3
1      1.1  1.2  1.3
2      2.1  2.2  2.3
使用透视表:

pd.pivot_table(df2,aggfunc='mean',index='T',columns='well')

     value          
well     X    Y    Z
T                   
0      0.1  0.2  0.3
1      1.1  1.2  1.3
2      2.1  2.2  2.3

哇!我想我只是踏入了一些深水区。这太棒了。非常感谢。现在我知道从哪里开始了。
df2.pivot(index='T',columns='well')

     value          
well     X    Y    Z
T                   
0      0.1  0.2  0.3
1      1.1  1.2  1.3
2      2.1  2.2  2.3
df2.set_index(['T','well']).unstack()

     value          
well     X    Y    Z
T                   
0      0.1  0.2  0.3
1      1.1  1.2  1.3
2      2.1  2.2  2.3
pd.pivot_table(df2,aggfunc='mean',index='T',columns='well')

     value          
well     X    Y    Z
T                   
0      0.1  0.2  0.3
1      1.1  1.2  1.3
2      2.1  2.2  2.3