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