сортировка строк при экспорте CSV-файла pandas - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть CSV-файл, содержащий 700 тыс. Строк, и мне нужно создать дополнительный CSV-файл, который бы взял нужные мне данные и отсортировал их по порядку.

Так, например, мой исходный файл CSV имеетданные, которые выглядят примерно так:

Name     Code   Date        Area
Peter     01    01/01/2016  Wales
Peter     02    01/02/2017  England
Peter     34    25/02/2018  Wales
Paul      65    01/12/2015  Scotland
Paul      12    02/12/2015  Scotland
Simon     12    23/08/2016  England
Simon     12    28/09/2016  Wales
Simon     12    27/10/2018  England

Что мне нужно сделать, это создать уникальную строку для человека, но перечислить коды, основанные на том, когда был сделан код (сначала самая старая дата).Я должен отметить, что я отсортировал набор данных в Excel, чтобы перечислить даты в правильном порядке (сначала самые старые), чтобы посмотреть, поможет ли это.

Поэтому вывод, который мне нужен, должен выглядеть следующим образом:

Name   Codes   
Peter  01,02,34
Paul   65,12
Simon  12,12,12

Коды перечислены по порядку к самой старой дате.

Меня не интересует Район, поскольку он не имеет отношения к окончательному ответу.

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

Я пытался найти это, но, похоже, не могу правильно сформулировать его, чтобы получить соответствующий результат.

Кто-нибудь знает, почему последовательность не экспортируется правильно?

Код, который я использую:

df2 = df2.groupby ('Name')['Code'].apply(', '.join).reset_index()
df2
export_csv = df2.to_csv(r'Filelocation.csv', index = None, header = True)

Спасибо

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

Поскольку я не знаю, что для вас имеет df2, я создал фрейм данных и проверил ваш код, который дает мне правильную последовательность.Внедрите и дайте мне знать, что не работает для вас:

df = pd.DataFrame({'Name': ['Peter', 'Peter', 'Peter', 'Paul', 'Paul', 'Simon', 'Simon', 'Simon'],
                   'Code': ['01', '02', '34', '65', '12', '12', '12', '12']})
df

    Code    Name
0   01  Peter
1   02  Peter
2   34  Peter
3   65  Paul
4   12  Paul
5   12  Simon
6   12  Simon
7   12  Simon

dfn = df.groupby ('Name')['Code'].apply(', '.join).reset_index()
dfn

    Name    Code
0   Paul    65, 12
1   Peter   01, 02, 34
2   Simon   12, 12, 12

dfn.index = dfn.Name # Mapping index with column Name
dfn.drop(columns=['Name'], inplace=True) # Dropping column Name
dfn

        Code
Name    
Paul    65, 12
Peter   01, 02, 34
Simon   12, 12, 12

dfn = dfn.loc[df.Name.unique()] # Bringing dataframe into your desired order
dfn

        Code
Name    
Peter   01, 02, 34
Paul    65, 12
Simon   12, 12, 12


dfn.to_csv('sample.csv')

img

Это то, что вам нужно?Если нет, прокомментируйте.

0 голосов
/ 26 ноября 2018

Вероятно, проблема заключается в том, что вы не указали dayfirst=True при преобразовании вашей серии в datetime:

df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)

Затем можно выполнить сортировку по Date и выполнить операцию groupby в обычном режиме.:

res = df.sort_values('Date')\
        .groupby('Name')['Code']\
        .agg(lambda x: ','.join(map(str, x)))
0 голосов
/ 26 ноября 2018

Полагаю, может работать следующее:

df2.groupby('Name')['Code'].apply(lambda x: " " % ', '.join(x))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...