Бин столбец по временным интервалам и рассчитать сумму - PullRequest
0 голосов
/ 16 января 2019

У меня есть панды DataFrame:

df = pd.DataFrame({
    "computer": [0, 1, 2, 3, 0, 1, 2, 3],
    "time":     [0, 0, 1, 1, 2, 3, 4, 5],
    "value":    [4, 1, 5, 6, 1, 0, 3, 4],
})
df["time"] = pd.to_datetime(df["time"], unit="s")
df.set_index(["computer", "time"])

Я хотел бы разбить столбец time на интервалы 4 с и суммировать value с. Вывод будет выглядеть так:

df = pd.DataFrame({
    "computer":   [0, 1, 2, 3, 2, 3],
    "start_time": [0, 0, 0, 0, 4, 4],
    "value":      [5, 1, 5, 6, 3, 4],
})
df["start_time"] = pd.to_datetime(df["start_time"], unit="s")
df.set_index(["computer", "start_time"])

Я пытался применить код, предоставленный группой Pandas, к временным окнам , но я не могу заставить его работать из-за многоиндексности. Я также попробовал метод resample, но применима та же проблема.

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Используйте groupby с pd.Grouper:

u = (df.groupby(['computer', pd.Grouper(key='time', freq='4s')])
       .sum()
       .sort_index(level=1)
       .reset_index())
u['time'] = u['time'].dt.second

u
   computer  time  value
0         0     0      5
1         1     0      1
2         2     0      5
3         3     0      6
4         2     4      3
5         3     4      4

Вместо отдельных groupby и resample вы можете разрешить одному вызову groupby обрабатывать как группировку на «компьютере», так и повторную выборку «времени» вместе.

0 голосов
/ 17 января 2019

Использование, reset_index, затем groupby и resample:

df.reset_index(level=0).groupby('computer').resample('4s')['value']\
   .sum().to_frame().sort_index(level=1)

OR

df.reset_index('computer').groupby('computer').resample('4s')['value']\
   .sum().to_frame().sort_index(level=1)

Выход:

                              value
computer time                      
0        1970-01-01 00:00:00      5
1        1970-01-01 00:00:00      1
2        1970-01-01 00:00:00      5
3        1970-01-01 00:00:00      6
2        1970-01-01 00:00:04      3
3        1970-01-01 00:00:04      4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...