Панды, сгруппировать по повторной выборке и заполнить пропущенные значения нулем - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть следующий код

import pandas as pd

data = {'date': ['2014-05-01', '2014-05-02', '2014-05-04', '2014-05-01', '2014-05-03', '2014-05-04'],
        'battle_deaths': [34, 25, 26, 15, 15, 14],
        'group': [1, 1, 1, 2, 2, 2]}

df = pd.DataFrame(data, columns=['date', 'battle_deaths', 'group'])

df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date')
df = df.sort_index()

Я хочу подсчитать количество смертей в бою на группу без пробелов в датах.Что-то вроде

            battle_deaths  group
date                            
2014-05-01             34      1
2014-05-01             15      2
2014-05-02             25      1
2014-05-02              0      2 <--added with battle_deaths = 0 to fill the date range
2014-05-03              0      1 <--added
2014-05-03             15      2
2014-05-04             26      1
2014-05-04             14      2

Я пробовал следующее, но оно не работает (потому что метод fillna не принимает число, а добавляет его здесь, чтобы показать, чего я хочу достичь)

df.groupby(df.group.name).resample('D').fillna(0)

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

1 Ответ

0 голосов
/ 21 ноября 2018

Используйте Resampler.asfreq с параметром fill_value=0:

df = df.groupby('group').resample('D')['battle_deaths'].asfreq(fill_value=0).reset_index()
print (df)
   group       date  battle_deaths
0      1 2014-05-01             34
1      1 2014-05-02             25
2      1 2014-05-03              0
3      1 2014-05-04             26
4      2 2014-05-01             15
5      2 2014-05-02              0
6      2 2014-05-03             15
7      2 2014-05-04             14
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...