导出熊猫csv文件时对行进行排序

时间:2018-11-26 12:49:58

标签: python pandas pandas-groupby

我有一个包含70万行的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)

谢谢

3 个答案:

答案 0 :(得分:0)

我想以下方法可能会起作用:

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

答案 1 :(得分:0)

由于我不知道 #inputs odd = 0 even = 0 counter = 0 # calculations for even numbers while counter <= 20 and counter % 2 == 0: even = even + counter counter += 1 # calculations for odd numbers if counter <= 20 and counter % 2 != 0: odd = odd + counter counter += 1 print("The sum of the ODD numbers between 1 and 20 is", odd) print("The sum of the EVEN numbers between 1 and 20 is", even) 可以为您提供什么,因此我创建了一个数据框并验证了您的代码,该代码为我提供了正确的顺序。实施并让我知道什么不适合您:

df2

img

这是您需要的吗?如果没有,请发表评论。

答案 2 :(得分:0)

问题可能是您将系列转换为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)))