【问题标题】:Extract multi-year three month series (winter) from pandas dataframe从熊猫数据框中提取多年三个月系列(冬季)
【发布时间】:2015-09-06 22:59:45
【问题描述】:

我有一个包含 70 年每小时数据的 pandas DataFrame,如下所示:

                                    pressure
2015-06-01 18:00:00                    945.6  
2015-06-01 19:00:00                    945.6  
2015-06-01 20:00:00                    945.4  
2015-06-01 21:00:00                    945.4  
2015-06-01 22:00:00                    945.3

我想从每年中提取冬季月份 (D-J-F) 并生成一个包含一系列冬季的新 DataFrame。 我发现了很多复杂的东西(例如,将df.index.month 提取为一个新列,然后在之后处理这个),但是有没有办法让冬天的月份变得简单?

【问题讨论】:

    标签: python indexing pandas time-series


    【解决方案1】:

    你可以使用map():

    import pandas as pd
    
    df = pd.DataFrame({'date' : [datetime.date(2015, 11, 1), datetime.date(2015, 12, 1), datetime.date(2015, 1, 1), datetime.date(2015, 2, 1)],
                       'pressure': [1,2,3,4]})
    winter_months = [12, 1, 2]
    print df
    
    #          date  pressure
    # 0  2015-11-01         1
    # 1  2015-12-01         2
    # 2  2015-01-01         3
    # 3  2015-02-01         4
    
    df = df[df["date"].map(lambda t: t.month in winter_months)]
    print df
    
    #          date  pressure
    # 1  2015-12-01         2
    # 2  2015-01-01         3
    # 3  2015-02-01         4
    

    编辑: 我注意到在您的示例中,日期是数据框的索引。这仍然有效:

    df = df[df.index.map(lambda t: t.month in winter_months)]
    

    【讨论】:

    • 感谢您的回答...问题是此方法访问的是“常规”数据列而不是索引。
    • 我刚刚编辑了我的答案以表明它也适用于索引,只需使用 df.index.map(lambda t: t.month in winter_months) 代替。
    • 啊,对不起,我在你编辑的时候写了我的评论……谢谢!另请参阅我刚刚找到的答案。
    【解决方案2】:

    我才发现

    df[(df.index.month==12) | (df.index.month==1) | (df.index.month==2)]
    

    工作正常。

    【讨论】:

      猜你喜欢
      • 2020-11-16
      • 2017-06-14
      • 1970-01-01
      • 2020-10-06
      • 2023-04-02
      • 1970-01-01
      • 2019-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多