Агрегировать столбцы с одинаковой датой (суммой) - PullRequest
0 голосов
/ 16 мая 2018

Итак, мне нужно агрегировать строки с одинаковой датой.

Мой код на данный момент возвращает следующее:

                      date  value  source
0  2018-04-08 15:52:26.110      1  ANAPRO
1  2018-04-22 12:14:38.807      1  ANAPRO
2  2018-04-22 12:34:18.403      1  ANAPRO
3  2018-04-22 12:40:35.877      1  ANAPRO
4  2018-04-22 12:53:57.897      1  ANAPRO
5  2018-04-22 13:02:45.180      1  ANAPRO
6  2018-05-04 17:41:15.840      1  ANAPRO
7  2018-04-22 15:03:54.353      1  ANAPRO
8  2018-04-22 15:24:27.030      1  ANAPRO
9  2018-04-22 15:27:56.813      1  ANAPRO

Не думаю, что смогу агрегировать столбцы, пока у меня отображается ЧЧ: ММ: СС.ms вместе с датой (мне нужна только дата)

Я пробовал это:

df['date'] = pandas.to_datetime(df['date'], format='%b %d %Y.%f').astype(str)

Но безрезультатно, я все еще получил то же самое возвращение.

Код:

Читает мой файл Excel (пользовательский ввод).

df = pandas.read_excel(var + '.xlsx')

Выбирает нужные мне столбцы и создает новый .xlsx для его хранения.

df = df.iloc[:, 36].to_excel(var + '_.xlsx', index=False)

Открывает новый файл .xlsx.

df = pandas.read_excel(var + '_.xlsx')

Переименовывает столбец

df = df.rename(columns={'Prospect Dt. Cadastro': 'date'})

Добавляет другие нужные мне столбцы.

df['value'] = 1
df['source'] = 'ANAPRO'

Пытается отформатировать дату.

df['date'] = pandas.to_datetime(df['date'], format='%b %d` %Y.%f').astype(str)

Создает окончательный xlsx со всеми отформатированными данными.

df = df.to_excel('payload.xlsx')

Читает окончательный xlsx.

df = pandas.read_excel('payload.xlsx', names=['date', 'value', 'source'])

Печать первых 10 строк.

print(df.head(10))

Я новичок в python, извините, если я делаю что-то неловкое, спасибо!

1 Ответ

0 голосов
/ 16 мая 2018

IIUC, вы можете захотеть pandas.Series.dt.date:

df['date'] = pandas.to_datetime(df['date']).dt.date

>>> df
         date  value  source
0  2018-04-08      1  ANAPRO
1  2018-04-22      1  ANAPRO
2  2018-04-22      1  ANAPRO
3  2018-04-22      1  ANAPRO
4  2018-04-22      1  ANAPRO
5  2018-04-22      1  ANAPRO
6  2018-05-04      1  ANAPRO
7  2018-04-22      1  ANAPRO
8  2018-04-22      1  ANAPRO
9  2018-04-22      1  ANAPRO

Или, если ваша цель - агрегирование с использованием groupby, вы можете сохранить всеинформацию в исходном столбце даты и сгруппировать только по дате:

df['date'] = pandas.to_datetime(df['date'])

df.groupby(df['date'].dt.date)
# for example, to get the sum each day:
# df.groupby(df['date'].dt.date).sum()

#             value
# date             
# 2018-04-08      1
# 2018-04-22      8
# 2018-05-04      1

Или, используя pd.Grouper:

df['date'] = pandas.to_datetime(df['date'])

df.groupby(pd.Grouper(key='date', freq='D'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...