gpt4 book ai didi

python - 这叫什么 : Melting? 旋转? reshape ?

转载 作者:太空宇宙 更新时间:2023-11-03 14:05:07 24 4
gpt4 key购买 nike

这是一个关于在 Python 中使用 pandas 和 ggplot 的问题,但也非常感谢 R 答案。

我正在尝试绘制一些看起来有点像下图所示的时间序列数据。 X、Y、Z 是孔板 ID(实验名称),0、1、2 是不同的时间。我希望能够在不同的 Pane /子图/方面以及在同一方面但具有不同颜色的情况下将时间进程绘制为折线图。

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

我知道 pandas 结合 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 中完成此操作的答案也将非常有帮助。

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

最佳答案

它被称为使用 pivot 或 melting 等方法 reshape 数据框,可以包括堆栈和取消堆栈、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

您可以使用 stackreset_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_indexunstack:

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

关于python - 这叫什么 : Melting? 旋转? reshape ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44508049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com