элементы args не работают в функции apply - PullRequest
0 голосов
/ 06 февраля 2019

Я хочу использовать pd.DataFrame.sum с apply.Однако подпись кажется неработоспособной

Я начал здесь: python pandas: применить функцию с аргументами к серии , чтобы понять, что потребовалось для передачи параметров в функцию с помощью apply.Я попробовал ответ, который кажется более подходящим (третий), и все же использование аргументов кажется неработоспособным.

indexes = ['2017-09-01 01:15:00', '2017-09-01 01:30:00', 
           '2017-09-01 01:54:00', '2017-09-01 01:59:00', 
           '2017-09-01 02:15:00', '2017-09-01 02:30:00', 
           '2017-09-01  02:54:00', '2017-09-01 02:59:00', 
           '2017-09-01 05:15:00', '2017-09-01 05:30:00', 
           '2017-09-01  05:54:00', '2017-09-01 05:59:00']
values_A = [1, 3, 4, 3, 5, 6, 3, 3, 9, 1, 9, 8]
values_B = [1, 3, 4, 3, 5, 6, 3, 3, 9, 2, 6, 3]

table = pd.DataFrame({'datetime' : indexes, 'A' : values_A, 'B' :   values_B})
table['datetime'] = pd.to_datetime(table['datetime'])
table.set_index('datetime', inplace=True)
table.sort_index(inplace=True)

Что я хотел (и получить с помощью

    table.groupby([pd.Grouper(freq='60Min', base=0)]).sum(skipna=True)

):

2017-09-01 01:00:00     11.0    11.0
2017-09-01 02:00:00     17.0    17.0
2017-09-01 03:00:00     NaN     NaN
2017-09-01 04:00:00     NaN     NaN
2017-09-01 05:00:00     27.0    20.0

Что я получаю (используя

table.groupby([pd.Grouper(freq='60Min',base=0)]).apply(pd.Series.sum, skipna = True):

2017-09-01 01:00:00     11.0    11.0
2017-09-01 02:00:00     17.0    17.0
2017-09-01 03:00:00     0.0     0.0
2017-09-01 04:00:00     0.0     0.0
2017-09-01 05:00:00     27.0    20.0

1 Ответ

0 голосов
/ 07 февраля 2019

Это не совсем решение.Но это способ обойти проблему.Если я сделаю

table['hour'] = table.index.hour
table.groupby([pd.Grouper(freq='60Min', base=0), 'hour']).apply(pd.Series.sum, skipna = True)

Часы, которые отсутствуют, будут удалены.Однако это не объясняет наблюдаемое поведение.

...