首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python Pandas将计算写入新的Csv文件

Python Pandas将计算写入新的Csv文件
EN

Stack Overflow用户
提问于 2018-02-24 12:15:08
回答 1查看 516关注 0票数 1

使用: Python 3.6,Pandas 0.22

我正在尝试取DataFrame的最后一行,在这里我正在计算平均值,并以特定格式将其写入一个新的.csv文件。

代码语言:javascript
运行
复制
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文件的输出:

代码语言:javascript
运行
复制
NAME   MONTH    AVERAGE
    GRAND RAPIDS GERALD R FORD INTERNATIONAL AIRPORT, MI US January, 0.006451613

在我看来,逻辑应该是:

代码语言:javascript
运行
复制
df2.groupby([df2.DATE.dt.month,'NAME'])['SNOW'].mean().sort_values().to_csv('avg.csv', columns = 'NAME', 'MONTH', 'AVERAGE')

我尝试在变量中创建月份和列标题'AVERAGE‘以写入新文件,但这不起作用。我一直在搜索文档以测试更多内容,但找不到与此问题相关的任何内容。

或另一次尝试创建新列,但这不适用于将它们与“NAME”列相链接:

代码语言:javascript
运行
复制
df2 = df2.convert_objects(convert_numeric=True)
df['MONTH']='?'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-24 12:51:52

代码语言:javascript
运行
复制
(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月’等。

要将年份作为单独的列包括在内,您可以这样做:

代码语言:javascript
运行
复制
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.
)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48959301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档