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

How to sort Months in Monthly order within Python Pandas when working with .CSV files?

对于每个 NAME/LOCATION,计算每个月的平均降雪量。将结果保存在两个单独的 .csv 文件中(一个用于 2016 年,另一个用于 2017 年),将文件命名为 average2016.csv 和 average2017.csv。 我在 Panadas 中使用 Python 3.8。 我使用以下代码完成了此操作:

import numpy as np
import pandas as pd

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

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


df16 = 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 月份是五月然后是六月。我怎样才能做到这一点?还有没有办法摆脱第一个编号的列?

您可以 sort 在 DATE 列上。但是你需要记住在你的 groupby 中做 sort=False ,否则它会使用字符串排序在那里排序。此外,您每年的重复代码可以替换为单个 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)