簡體   English   中英

導出熊貓csv文件時對行進行排序

[英]sorting rows when exporting pandas csv file

我有一個包含700k行的CSV文件,我需要做的是創建一個附加的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)

謝謝

我想以下可能有效:

df2.groupby('Name')['Code'].apply(lambda x: " " % ', '.join(x))

由於我不清楚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

這是您需要的嗎? 如果沒有,請發表評論。

問題可能是您在將系列轉換為datetime時未指定dayfirst=True

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)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM