【问题标题】:Pandas, sort by month and create new column for each year熊猫,按月排序并为每年创建新列
【发布时间】:2020-12-09 06:40:58
【问题描述】:

我有一个如下所示的数据框:

        date         data 
        2013-09-03     10
        2013-09-04     9
        2013-10-03     14
        2014-09-02     13
        2015-08-07     12
        2016-09-02     17

然后我应用下面的代码只选择第 9 个月

import pandas as pd
import datetime as dt

df= df[df['Date'].dt.month == 9]  # select only the 9th month

这让我得到以下信息:

        date         data 
        2013-09-03     10
        2013-09-04     9
        2014-09-02     13
        2016-09-02     17

但我要创建的是每次选择第 9 个月时的一列,因此 它可以成为一个单独的列

        date         data  2013  2014 2016
        2013-09-03     10   10
        2013-09-04     9     9
        2014-09-07     13         13
        2016-09-08     17               17

我想我必须在 for 循环中使用 dt.year 函数来为每年创建一个列,但我认为 pandas 中可能有更简单的解决方案?

【问题讨论】:

    标签: python arrays pandas datetime time


    【解决方案1】:

    你可以试试crosstab

    s = pd.crosstab(index=df.index,columns=df.date.dt.year,values=df.data,aggfunc='sum').fillna('')
    df = df.join(s)
    df
    Out[45]: 
            date  data 2013 2014 2016
    0 2013-09-03    10   10          
    1 2013-09-04     9    9          
    2 2014-09-02    13        13     
    3 2016-09-02    17             17
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      • 2018-06-01
      • 2013-02-12
      • 2016-05-31
      • 2016-06-24
      相关资源
      最近更新 更多