使用:Python 3.6,Pandas 0.22
我正在尝试使用DataFrame的最后一行来计算平均值,并将其写入特定格式的新.csv文件中。
df2 = pd.read_csv("Data.csv")
gname = df2.groupby(['NAME'])
for NAME, NAME_df2 in gname:
df2['DATE'] = pd.to_datetime(df2['DATE'])
df2.groupby([df2.DATE.dt.month,'NAME'])['SNOW'].mean().sort_values().to_csv('avg.csv')
这是我想要的avg.csv文件输出:
NAME MONTH AVERAGE
GRAND RAPIDS GERALD R FORD INTERNATIONAL AIRPORT, MI US January, 0.006451613
在我的脑海里,逻辑应该是:
df2.groupby([df2.DATE.dt.month,'NAME'])['SNOW'].mean().sort_values().to_csv('avg.csv', columns = 'NAME', 'MONTH', 'AVERAGE')
我试图在变量中创建月份和列标题“AVERAGE”以写入新文件,但这不起作用。我一直在搜索文档以测试更多内容,但找不到与此问题相关的任何内容。
或者是另一次尝试创建新列,但这不适用于将它们与“NAME”列相关联:
df2 = df2.convert_objects(convert_numeric=True)
df['MONTH']='?'
答案 0 :(得分:2)
(df
.assign(MONTH=df['DATE'].dt.strftime('%B')) # Use `%B` for full name of month
.groupby(['NAME', 'MONTH'], as_index=False)['SNOW']
.agg({'AVERAGE': 'mean'}) # Effectively renames the SNOW column to AVERAGE.
)
因此,这些月按自然顺序排序,您可能希望使用.strftime('(%m) %B')
,这将导致'(01)1月','(02)2月'等。
要将年份包含在单独的列中,您可以执行以下操作:
dates = pd.DatetimeIndex(df['DATE'])
(df
.assign(MONTH=dates.dt.strftime('%B'), # Use `%B` for full name of month
YEAR=dates.dt.strftime('%Y'))
.groupby(['NAME', 'YEAR', 'MONTH'], as_index=False)['SNOW']
.agg({'AVERAGE': 'mean'}) # Effectively renames the SNOW column to AVERAGE.
)