Разделить столбец на несколько столбцов на основе переменной - PullRequest
0 голосов
/ 14 февраля 2019

Я новичок в 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 являются соответствующими значениями.

Iя поиграл с pd.pivot, .stack () и .unstack () и некоторыми другими вещами, но pd.melt () - самое близкое, что я получил.

Вероятно, стоит отметить, чтоЗначения 'dep' непрерывны в данных, но значения 'rho' уникальны для каждой точки.

Спасибо

1 Ответ

0 голосов
/ 14 февраля 2019

Вы можете попробовать с wide_to_long

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