Добавить столбец подсчета в сводную таблицу Pandas - PullRequest
0 голосов
/ 25 января 2019

У меня есть фрейм данных Pandas, в котором хранятся данные для проверки ноутбуков в моем отделе. В кадре данных есть столбцы для извлеченного времени (имя столбца Out), проверенное время (In), имя проверяемого лица (Name) и количество машин, проверенных этим человеком (Number). Я хочу создать новый фрейм данных, который отображает как количество проверок, выполненных за данную неделю, так и количество проверенных машин за данную неделю. Исходный фрейм данных называется cb.

Мне удалось создать сводную таблицу, в которой указано количество машин, проверенных за неделю:

dates = pd.pivot_table(cb, values="Number", index="Out",  aggfunc=sum)

Мне интересно, что я могу добавить к этой строке кода, чтобы добавить новый столбец, который вычисляет количество раз, когда машины были извлечены. Например, если два человека проверили ноутбуки за определенную неделю, человек 1 проверил 10 ноутбуков, а человек 2 проверил 5, то должен быть столбец «Число», который на этой неделе читается как «15», а другой столбец «Частота». это читает "2".

Возможно ли это с одной pivot_table строкой или есть что-то еще? Заранее спасибо.

РЕДАКТИРОВАТЬ: Вот то, что я надеюсь, является небольшим примером того, что я ищу. Во-первых, вот исходные данные из CSV, который я читаю:

Name    Number  DateOut TimeOut DateIn  TimeIn
C   1   8/31/2017   2:00p   9/1/2017    3:40p
Ma  2   8/31/2017   3:30p   .   .
S   1   9/6/2017    10:50a  9/6/2017    1:55p
S   3   9/7/2017    10:00a  9/7/2017    3:00p
C   1   9/7/2017    2:20p   9/8/2017    11:00a
Ma  2   9/7/2017    4:00p   9/8/2017    10:00a
S   4   9/8/2017    10:50a  9/8/2017    3:15p
W   6   9/11/2017   8:15a   9/11/2017   11:00a
B   4   9/11/2017   10:45a  9/11/2017   1:00p
S   4   9/11/2017   10:55a  9/11/2017   3:55p
S   3   9/12/2017   12:55p  9/12/2017   3:00p
Ma  2   9/12/2017   4:00p   9/15/2017   10:00a
S   1   9/13/2017   11:00a  9/13/2017   1:00p
T   1   9/13/2017   1:00p   .   .
K   1   9/13/2017   2:00p   9/14/2017   10:00a
F   2   9/13/2017   4:00p   9/14/2017   11:45a
S   3   9/14/2017   1:00p   9/14/2017   3:00p
C   1   9/14/2017   3:50p   9/15/2017   10:00a
F   4   9/15/2017   9:35a   9/15/2017   3:00p

(Имена отредактированы для приватности.)

Код для чтения в нем (парсинг заданных дат в правильный индекс DateTime):

import pandas as pd
cb = pd.read_csv("chromebookdata.csv", na_values=".", 
             parse_dates={"In": [2,3], "Out":[4,5]})
cb['In'] = pd.to_datetime(cb['In'], errors="coerce")
cb['Out'] = pd.to_datetime(cb['Out'], errors="coerce")

Создание сводной таблицы, в которой указано количество машин в неделю:

dates = pd.pivot_table(cb, values="Number", index="Out",  aggfunc=sum)
dates_weekly = dates.resample("W").sum()

В этой сводной таблице указано количество проверенных машин за неделю:

            Number
In                
2017-09-03     3.0
2017-09-10    11.0
2017-09-17    33.0

Мне нужен новый столбец для числа раз проверок, поэтому для этих данных это будет выглядеть так:

            Number    Count
In                
2017-09-03     3.0        2
2017-09-10    11.0        5
2017-09-17    33.0       12

1 Ответ

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

Предполагая, что ваши dates_weekly и cb кадры данных отсортированы по дате:

# Round your dates to the day
cb['dates'] = cb['dates'].dt.floor('d') 
# Group by rounded date and count the number of rows per each date
dates_weekly['frequency'] = cb.groupby('dates').agg('count') 
...