这是一个关于在Python中使用pandas和ggplot的问题,但R答案也非常受欢迎。
我试图绘制一些时间序列数据,看起来有点像下面显示的那样。 X,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()
或
from ggplot import *
ggplot(aes(x='T', y='value'), data = df) + geom_line() + facet_grid(x='well')
如果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中完成此操作的答案也会非常有用。
如果有人可以推荐一个好的资源来学习用数据做这些事情,我也会感激。
答案 0 :(得分:4)
它被称为使用pivot或fusion等方法重塑数据框,可以包括stack和unstack,pivot_table以及其他各种方法。
print(df)
X Y Z
0 0.1 0.2 0.3
1 1.1 1.2 1.3
2 2.1 2.2 2.3
您可以使用stack
和reset_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
print(df2)
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
使用set_index
和unstack
:
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
使用pivot_table
:
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
答案 1 :(得分:1)
试试这个
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