返回Python中的月度指数中的“每月天数”列

2024-03-29 12:57:30 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我已经使用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]

最终的目标是创建一个列(就像循环一样),但是更高效,而且不需要创建列表,循环,然后将列表添加到数据帧。你知道吗


Tags: 方法dataframepandasdfindexvaldaysyear
2条回答

mapdf.index一起使用:

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

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

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

相关问题 更多 >