根据变量将列拆分为多个列

问题描述 投票:0回答:1

我是python和数据科学的新手,我有一个数据帧

WellID  x  y  rho1  rho2  rho3  ...   rho5  dep1  dep2  dep3  dep4  dep5
0       1  5  3    44    67    34  ...     65     0     1     2     3     4
1       2  1  6    87    67    67  ...     34     0     1     2     3     4
2       3  6  3    65    34    34  ...     65     0     1     2     3     4
3       4  5  6    98    45    67  ...     32     0     1     2     3     4
4       5  3  3    34    65    34  ...     65     0     1     2     3     4
5       6  4  5    67    98    98  ...     34     0     1     2     3     4

熔化df后,我的产品是

df.melt(['WellID','x','y'])

WellID  x  y variable  value
0        1  5  3     rho1     44
48       1  5  3     dep4      3
42       1  5  3     dep3      2
36       1  5  3     dep2      1
6        1  5  3     rho2     67
30       1  5  3     dep1      0
24       1  5  3     rho5     65
54       1  5  3     dep5      4
12       1  5  3     rho3     34
18       1  5  3     rho4     67
43       2  1  6     dep3      2
37       2  1  6     dep2      1
31       2  1  6     dep1      0
49       2  1  6     dep4      3
19       2  1  6     rho4     34
.
.
.
.

等等。

但是,我需要的是一个df,其中我有一个'dep'和'rho'列,它与特定的'WellID'和dep和rho的数值相关,即

这是我正在寻找的输出

WellID  x  y  Dep  Rho
1       1  5  dep1   rho1
1       1  5  dep2   rho2
1       1  5  dep3   rho3
1       1  5  dep4   rho4
2       5  3  dep1   rho1
2       5  3  dep2   rho2
2       5  3  dep3   rho3

依此类推,其中深度和rho列中的值是相应的值。

我玩过pd.pivot,.stack()和.unstack()以及其他一些东西,但pd.melt()是我得到的最接近的。

值得注意的是,'dep'值在数据中是连续的,但'rho'值对于每个点都是唯一的。

谢谢

pandas dataframe melt
1个回答
0
投票

你可以试试wide_to_long

Newdf=pd.wide_to_long(df,['rho','dep'],i=['WellID','x','y'],j='drop').reset_index(level=[0,1,2])
© www.soinside.com 2019 - 2024. All rights reserved.