根据变量

时间:2019-02-13 22:19:05

标签: pandas dataframe melt

我是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

依此类推,其中depth和rho列中的值是对应的值。

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

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

谢谢

1 个答案:

答案 0 :(得分:0)

您可以尝试使用wide_to_long

Newdf=pd.wide_to_long(df,['rho','dep'],i=['WellID','x','y'],j='drop').reset_index(level=[0,1,2])