Python 比较大熊猫不同年份的同一天

Python 比较大熊猫不同年份的同一天,python,python-3.x,date,pandas,Python,Python 3.x,Date,Pandas,我是一个新手,仍在努力弄清楚熊猫-拆分/应用/合并才刚刚开始有意义,但我还没有做到 我试图获得前几年(2013-2015年)同一天的历史高位和低位销售电话号码,然后有另一个专栏告诉我2016年电话号码高于或低于前几年高位或低位的天数以及数值 以下是我迄今为止的尝试: df = pd.read_csv('filename.csv') df['Date'] = pd.to_datetime(df['Date']) df = df[(df['Date']>= '01/01/2013') &am

我是一个新手,仍在努力弄清楚熊猫-拆分/应用/合并才刚刚开始有意义,但我还没有做到

我试图获得前几年(2013-2015年)同一天的历史高位和低位销售电话号码,然后有另一个专栏告诉我2016年电话号码高于或低于前几年高位或低位的天数以及数值

以下是我迄今为止的尝试:

df = pd.read_csv('filename.csv')
df['Date']  = pd.to_datetime(df['Date'])
df = df[(df['Date']>= '01/01/2013') & (df['Date'] <= '12/31/2015')]
df['Month']     = df.Date.dt.month
df['Day']   = df.Date.dt.day

dfMAX = df[df['Element'] == "MAX"]
dfMAX = (dfMAX.groupby([dfMAX.Date.dt.month, dfMAX.Date.dt.day, 'Element'])
            [['Data_Value']]
            .agg(['max']))
我在这里发布了一个csv文件:

谢谢你的帮助,
Me

我将使用以下步骤解决此问题:

  • 确保date是datetime列数据类型。然后,创建一个新列 使用
    .dt.dayofyear
    在名为Day\u Of_Year的数据框中
  • 将数据帧拆分为两个数据帧,一个是2013年到2015年,另一个是 2016年
  • 将您的2013年至2015年数据框与的
    .agg
    一起使用
    groupby
    获取2013年至2015年的最小值和最大值,以创建 数据框每日记录
  • 接下来,将此新的每日记录数据框与2016数据框合并 使用
    pd.merge
    ,您可以设置2016年至今的索引以及 使用
    left\u index=True
    right\u index=True
    合并索引
  • 最后,我将使用布尔索引只选择那些 2016年值超出最小值或最大值的记录 合并数据框中的列
  • 您的数据应该是这样的:

               min   max       Date Element  Value
    DayofYear                                     
    1          545  1812 2016-01-01     MAX   1887
    3          108  1815 2016-01-03     MAX   1906
    4          496  1618 2016-01-04     MAX   1701
    6          455  1864 2016-01-06     MIN    169
    8          511  1771 2016-01-08     MIN    232
    
    看到我的扰流板代码悬停在下面

    df=pd.read\u csv('Downloads/Day\u Over\u Day.csv',parse\u dates=['Date'])
    1.df['DayofYear']=df['Date'].dt.DayofYear
    2a。df_13_15=df.query('日期<“2016-01-01”)
    2b。df_2016=df.query('Date>=“2016-01-01”)
    3. & 4.df_Overlay=pd.merge(df_13_15.groupby('DayofYear')['Value'].agg('min','max']),df_2016.set_index('DayofYear'),left_index=True,right_index=True)
    5.打印(df_覆盖[(df_覆盖['Value']df_覆盖['max'])。head())


    你能在这里提供示例数据(复制/可复制)吗?@Scott_Boston,感谢你的教育和在代码上加上“扰流板”的封面。像这样的答案是一种乐趣,可以帮助像我这样的人学到很多东西。非常感谢你,我。
               min   max       Date Element  Value
    DayofYear                                     
    1          545  1812 2016-01-01     MAX   1887
    3          108  1815 2016-01-03     MAX   1906
    4          496  1618 2016-01-04     MAX   1701
    6          455  1864 2016-01-06     MIN    169
    8          511  1771 2016-01-08     MIN    232