Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 30, 2017 11:47:38

gitcdr
Зарегистрирован: 2017-08-30
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

CSV + pandas

Доброго дня всем! (или ночи)

Есть csv файл вида

 Date of event   |    Name        | Date of birth  | ID
07.08.1934      |   John Smith  | 09.09.1965  | 345
18.12.1996      |    Barbara D   | 01.08.1965  | 123
12.12.2001      |    Barbara D   | 01.08.1965  | 123
17.10.1994      |    John Snow  | 20.07.1965  | 567


Мне нужно найти уникальные строки , но при максимальной Date of Event
В итоге на выходе я должен получить такой CSV
 Date of event       Name        Date of birth  ID
06.01.1986          John Smith   23.08.1996 345
12.12.2001          Barbara D   01.08.1965  123
17.10.1994          John Snow   20.07.1965 567
Есть решение подобного рода:
 df = pd.read_csv('r.csv', delimiter='|', parse_dates=[0, 2])
df.groupby(['Date of birth])['Date of event'].max()
Но я таким образом получу просто сгруппироваые строки. Они мне как раз и нужны. Но вот что с ними делать дальше ума не приложу. Куда вставлять эту группировку, чтобы на выходе получить CSV в соответствии с этой получаемой группировкой, но со всеми столбцами и т.д. В качестве разделителя обязательно символ “|”
Заранее спасибо за любую помощь!

Отредактировано gitcdr (Авг. 30, 2017 11:48:36)

Офлайн

#2 Авг. 30, 2017 13:33:12

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

CSV + pandas

 group = df.groupby(['Date of birth])['Date of event'].max()
df[(df.Name.isin(group.index))&(df['Date of event'].isin(group.values))].to_csv(open('tmp.csv', 'w'), index=False, sep='|')
to_csv

Отредактировано noob_saibot (Авг. 30, 2017 13:38:47)

Офлайн

#3 Авг. 30, 2017 14:15:03

gitcdr
Зарегистрирован: 2017-08-30
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

CSV + pandas

Спасибо за помощь, правда питон ругается на

 df.Name.isin
Говорит нет такого Name
 AttributeError: 'DataFrame' object has no attribute 'Name'
Что под ним подразумевалось? Если я правильно понял строку, то тут идет некое объединение чего-то с чем-то а потом уже запись в csv. Я как раз бьюсь над тем, чтобы понять что с чем объединять

Отредактировано gitcdr (Авг. 30, 2017 14:18:16)

Офлайн

#4 Авг. 30, 2017 15:48:22

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

CSV + pandas

Да, не с name надо было сравнивать, косяк, сгрупировали же по Date of birth (Хотя ошибки не должно было быть все равно, если у вас есть колонка Name). После группировки вы получите series в котором индексом будет Date of birth, а значениями Date of event, после чего проверяете двойное условие что Date of birth и Date of event для датафрейма совпадают с теми что получили в series (Датафрейм размером с исходный но заполненный True or False) и берёте True значения из датафрейма, ну а далее в csv.

 df['Date of birth'].isin(group.index)

Отредактировано noob_saibot (Авг. 30, 2017 16:01:20)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version