我有一个包含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)
谢谢
答案 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
这是您需要的吗?如果没有,请发表评论。
答案 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)))