Преобразование данных нескольких строк в один столбец - PullRequest
0 голосов
/ 15 октября 2018

У меня есть фрейм данных

     year month     v_0     v_1   ...      v_27    v_28    v_29    v_30
0    1919    03     0.0     0.0   ...       0.0    13.0     0.0     0.0
1    1919    04     5.0     0.0   ...       0.0     0.0     0.0 -9999.0
2    1919    05     0.0     0.0   ...       0.0     0.0     0.0     0.0

Заголовки - это год, месяц и каждый день месяца.Я хочу преобразовать отдельные заголовки для каждого дня в один столбец, который будет номером дня для каждого месяца, за которым следуют данные.Это должно выглядеть примерно так.

Year         Month  Day  Value

1919           3     1    0

1919           3     2    0

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Вам может понадобиться проверить wide_to_long

pd.wide_to_long(df,'v',i=['year','month'],j='day',sep='_').reset_index()
Out[108]: 
    year  month day       v
0   1919      3   0     0.0
1   1919      3   1     0.0
2   1919      3  27     0.0
3   1919      3  28    13.0
4   1919      3  29     0.0
5   1919      3  30     0.0
6   1919      4   0     5.0
7   1919      4   1     0.0
8   1919      4  27     0.0
9   1919      4  28     0.0
10  1919      4  29     0.0
11  1919      4  30 -9999.0
12  1919      5   0     0.0
13  1919      5   1     0.0
14  1919      5  27     0.0
15  1919      5  28     0.0
16  1919      5  29     0.0
17  1919      5  30     0.0
0 голосов
/ 15 октября 2018

Вы хотите использовать DataFrame.melt ():

С учетом следующего кадра данных df:

        Year    Month   v_1     v_2
  0     1901    2       4       8
  1     1902    3       5       9
  2     1903    4       6       10
  3     1904    5       7       11

Вызов df.melt(id_vars=['Year', 'Month'], var_name='Day') дает такой результат:

       Year     Month   Day         value
  0     1901    2       v_1             4
  1     1902    3       v_1             5
  2     1903    4       v_1             6
  3     1904    5       v_1             7
  4     1901    2       v_2             8
  5     1902    3       v_2             9
  6     1903    4       v_2             10
  7     1904    5       v_2             11

Здесь происходит то, что melt перемещает все данные из столбцов, кроме Year и Month (id_vars), в новый столбец «value», а имена столбцов (v_0, v_1 ​​и т. Д.) Становятся новым столбцом с именем «variable»,Мы можем установить имя этого нового столбца с помощью аргумента var_name, который я установил выше для 'Day'.

На самом деле, поскольку имена столбцов дня начинаются с "v_", я бы начал с переименованияэти столбцы:

df.rename(axis='columns', mapper=lambda s: s.split('_')[-1], inplace=True)
df.melt(id_vars=['Year', 'Month'], var_name='Day')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...