为了账号安全,请及时绑定邮箱和手机立即绑定

使用 .CSV 文件时,如何在 Python Pandas 中按月顺序对月份进行排序?

使用 .CSV 文件时,如何在 Python Pandas 中按月顺序对月份进行排序?

慕妹3242003 2022-10-05 16:42:48
对于每个名称/位置,计算每月的平均降雪量。将结果保存在两个单独的 .csv 文件中(一个用于 2016,另一个用于 2017)将文件命名为 average2016.csv 和 average2017.csv。我使用 Python 3.8 和 Panadas。我用这段代码完成了这个:import numpy as npimport pandas as pddf = pd.read_csv('filteredData.csv')df['DATE'] = pd.to_datetime(df['DATE'])df['year'] = pd.DatetimeIndex(df['DATE']).yeardf16 = df[(df.year == 2016)]df17 = df[(df.year == 2017)]df_2016 = df16.groupby(['NAME', 'Month'])['SNOW'].mean().reset_index()df_2017 = df17.groupby(['NAME', 'Month'])['SNOW'].mean().reset_index()df_2016[['NAME', 'Month', 'SNOW']].to_csv('average2016.csv')df_2017[['NAME', 'Month', 'SNOW']].to_csv('average2017.csv')这张图片显示了我 2016 年的平均结果。但是,我遇到的问题是月份不是按月顺序排列的。我希望他们从 1 月到 12 月去每个地点。示例:我希望名称:ADA 0.7 SE,MI US Month's 是 May 然后是 June。我怎么能做到这一点?还有没有办法摆脱第一个编号的列?
查看完整描述

1 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

您可以sort在 DATE 列上。但是你需要记住sort=False在你的 groupby 中做,否则它将使用字符串排序在那里排序。此外,您每年的重复代码可以替换为单个 groupby,添加year到分组键中。然后,您将分别写入不同的文件,index=False这就是您摆脱索引的方式。


import numpy as np

import pandas as pd


df = pd.read_csv('filteredData.csv')


df['DATE'] = pd.to_datetime(df['DATE'])

df['year'] = df['DATE'].dt.year         # Datetime has this attribute already 


df = df.sort_values(['NAME', 'DATE'])   # Output will be in order within each Name


df = (df[df.year.between(2016,2017)]    # Only 2016 and 2017

        .groupby(['year', 'NAME', 'Month'], sort=False)['SNOW']

        .mean().reset_index())


for year,gp in df.groupby('year'):      # Write files separately by year

    gp[['NAME', 'Month', 'SNOW']].to_csv(f'average{year}.csv', index=False)


查看完整回答
反对 回复 2022-10-05
  • 1 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信