Конвертировать несколько столбцов в одну строку (Pandas / Numpy) - PullRequest
0 голосов
/ 04 июня 2018

Я хочу объединить месячные данные для нескольких атрибутов в одну строку, состоящую из данных за весь год.Эта проблема похожа на Объединение нескольких рядов временных рядов в один ряд с пандами .Решение этого вопроса сработало бы для меня, если бы месяцы моих лет были полными, но для большинства моих данных месяцы отсутствуют в отдельных годах.Если имеются данные только за декабрь, решение заполнит первый столбец, а не столбец 12.

Например, я использую только январь-июнь.

Вот примермои данные:

ex_df = pd.DataFrame({'year': [1966, 1966, 1966, 1967, 1967, 1967], 'month': [1, 2, 6, 2, 3, 4], 'A': [10, 5, 0, np.nan, 25, 0], 'B': [-100, -80, 100, -120, 0, 60], 'C': [-1, -18, -2, -11, 10, 6]})

Вот оптимальное решение:

sol_df = pd.DataFrame({'year': [1966, 1967], 'A1': [10, np.nan], 'A2': [5, np.nan],'A3': [np.nan, 25],'A4': [np.nan, 0],'A5': [np.nan, np.nan],'A6': [0, np.nan],'B1': [-100, np.nan],  'B2': [-80, -120], 'B3': [np.nan, 0], 'B4': [np.nan, 60], 'B5': [np.nan, np.nan], 'B6': [100, np.nan],'C1': [-1, np.nan],  'C2': [-18, -11], 'C3': [np.nan, 10], 'C4': [np.nan, 6], 'C5': [np.nan, np.nan], 'C6': [-2, np.nan] })

A, B, C являются атрибутами, а число соответствует месяцу.

Ответы [ 2 ]

0 голосов
/ 04 июня 2018
a = ex_df.melt(['year', 'month'])
a['Obsevation'] = a.variable + a.month.astype(str)
a.pivot_table('value', index='year', columns='Obsevation')

0 голосов
/ 04 июня 2018

Использование:

df = ex_df.set_index(['year','month']).unstack()
df.columns = ['{}{}'.format(x, y) for x, y in df.columns]
df = df.reset_index()
print (df)
   year    A1   A2    A3   A4   A6     B1     B2   B3    B4     B6   C1    C2  \
0  1966  10.0  5.0   NaN  NaN  0.0 -100.0  -80.0  NaN   NaN  100.0 -1.0 -18.0   
1  1967   NaN  NaN  25.0  0.0  NaN    NaN -120.0  0.0  60.0    NaN  NaN -11.0   

     C3   C4   C6  
0   NaN  NaN -2.0  

Объяснение :

  1. Первый set_index и unstack для изменения формы
  2. Свести Multiindex в столбцах с пониманием списка
  3. Создать столбец из индекса по reset_index
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...