【问题标题】:Return a column of 'days in month' from monthly index Python从每月索引 Python 返回一列“月中的天数”
【发布时间】:2019-07-16 12:18:00
【问题描述】:

我有一个每月值的时间序列,我想计算该月的天数(然后将该数字除以得到该月的每日平均值)。

我已经使用 calendar.monthrange() 通过循环遍历这些值来计算它,但我正在查看 pandas.DataFrame.apply 方法 (https://medium.com/@rtjeannier/pandas-101-cont-9d061cb73bfc) 并想知道如何使用它而不是循环?

下面的代码为我提供了我想要的输出,但出于效率(和学习)的目的,我想通过使用 apply 方法而不是循环来了解执行此操作的更好方法。

import pandas as pd
import calendar

df = pd.DataFrame()
df['temp'] = pd.date_range(start='01-Jan-2000', end='31-Dec-2018', freq='MS')  
df['value'] = 5
df.set_index('temp', inplace=True)

days_list = []
for val in df.index:
    days_list.append(calendar.monthrange(val.year, val.month)[1])

df['days_in_month'] = days_list

我可以很容易地找到索引中一行的天数:

calendar.monthrange(df.index[0].year, df.index[0].month)[1]

但是,如果我尝试为多个值(见下文)执行此操作,则会引发错误,我错过了如何在两者之间获取的方法。

calendar.monthrange(df.index.year, df.index.month)[1]

最终目标是创建一个列(就像循环一样),但效率更高,并且无需创建不必要的列表、循环遍历,然后将列表添加到数据框。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    mapdf.index 一起使用:

    df['days_in_month'] = df.index.map(lambda val: calendar.monthrange(val.year, val.month)[1])
    

    【讨论】:

      【解决方案2】:

      如何将索引列变为常规列,然后使用daysinmonth

      df['days_in_month'] = df.index.daysinmonth
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-11
        • 1970-01-01
        • 1970-01-01
        • 2020-10-02
        相关资源
        最近更新 更多