Как конвертировать преобразование данных в Python - PullRequest
0 голосов
/ 27 августа 2018

У меня есть фрейм данных со следующими значениями

Date,     value
2017/1/1, 5
2017/4/1, 6
2017/4/5, 12
2017/7/2, 15
2018/4/1, 50
2018/7/7, 11
2017/1/1, 5

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

2017/1   2017/4  2017/7  2018/1  2018/4  2018/7
 5         6     15      5       50      11
           12     

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Пример DataFrame

df = pd.DataFrame({
    'Date': pd.DatetimeIndex(
        ['2017-01-01', '2017-04-01', '2017-04-05',
         '2017-07-02', '2018-04-01', '2018-07-07',
         '2017-01-01'], freq=None),
     'value': [5, 6, 12, 15, 50, 11, 5]})

Решение

Создать словарь, содержащий год-месяц в качестве ключей (формат строки) и значения в видесписки соответствующих значений.

d = (df
 .assign(year_month=df['Date'].dt.strftime('%Y/%m'))
 .groupby('year_month')['value']
 .apply(list)
 .to_dict()
)

df = pd.concat([pd.Series(v, name=k) 
                for k, v in d.iteritems()], axis=1)[sorted(d)]

>>> df
   2017/01  2017/04  2017/07  2018/04  2018/07
0        5        6       15       50       11
1        5       12      NaN      NaN      NaN
0 голосов
/ 27 августа 2018

Вы можете groupby и изменить форму, чтобы получить ваш результат:

v = (df.set_index('Date')['value']
       .groupby(by=lambda x: x.rsplit('/', 1)[0], axis=0)
       .apply(list))
pd.DataFrame(v.values.tolist(), index=v.index).T

   2017/1  2017/4  2017/7  2018/4  2018/7
0     5.0     6.0    15.0    50.0    11.0
1     5.0    12.0     NaN     NaN     NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...