#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
У меня есть фрейм данных, который выглядит как:
df1:
------------- ------------------- ------------
| date | status | counts |
------------- ------------------- ------------
| 2020-03-02 | death | 0 |
| nan. | positive | 5 |
| nan. | recovery | 0 |
| nan. | positive cum | 5 |
| nan. | recovery cum | 0 |
| 2020-03-03 | death | 0 |
| nan. | positive | 10 |
| nan. | recovery | 0 |
| nan. | positive cum | 15 |
| nan. | recovery cum | 0 |
------------- ------------------- ------------
Я хочу повернуть фрейм данных таким образом, чтобы визуализировать таблицу:
------------- --------- ------------ ---------- --------------- ---------------
| date | death | positive | recovery | positive cum | recovery cum. |
------------- --------- ------------ ---------- --------------- ---------------
| 2020-03-02 | 0 | 5 | 0 | 5 | 0 |
| 2020-03-03 | 0 | 10 | 0 | 15 | 0 |
------------- --------- ------------ ---------- --------------- ---------------
Я пробовал:
pd.pivot_table(df, index=['date'], columns=['status'], values=['counts'], aggfunc='sum')
Но результаты принимают только ту строку, в которой была дата, отличная от nan. Пожалуйста, посоветуйте
Ответ №1:
Сначала ffill
NaN
значения в date
столбце, затем используйте pivot_table
with aggfunc=first
для изменения формы фрейма данных:
pvt = df.assign(date=df['date'].ffill())
.pivot_table(index='date', columns='status', values='counts', aggfunc='first')
Или, если в status
соответствующем конкретном date
нет повторяющихся значений, вы можете вместо этого использовать pivot
:
pvt = df.assign(date=df['date'].ffill()).pivot('date', 'status', 'counts')
status death positive positive cum recovery recovery cum
date
2020-03-02 0 5 5 0 0
2020-03-03 0 10 15 0 0