2024-04-19 00:16:39 发布
网友
Month column_1 column_2 201801 31 62 201802 28 56 ... 201812
Date column_1 column_2 2018-01-01 1 2 2018-01-02 1 2 ... 2018-01-31 1 2 2018-02-01 1 2 ... 2018-12-31 ..........
我想把每个月的平均值转换成日期值。你知道吗
我可以引用哪个函数来实现这一点? 非常感谢。你知道吗
可以按照以下步骤将数据帧的行从每月值扩展到每日值,然后在列中显示每个每月值的平均每日值。你知道吗
让我们从一个与您给出的示例类似的数据帧开始,但仅针对一月和二月:
import pandas as pd df = pd.DataFrame({'column_1':[31,28], 'column_2':[62,56]}, index=[201801, 201802]) df.index.name='Month'
看起来像:
column_1 column_2 Month 201801 31 62 201802 28 56
现在我们需要重新格式化索引中月份的显示方式,以便将索引的数据类型更改为period_range:
df.index = df.index.map(str) df.index = df.index.str[0:4] + '-' + df.index.str[-2:] df.index = pd.period_range(start=df.index.values[0], periods=len(df.index.values), freq='m')
运行以下行可以将每月的行转换为每天的行:
df = df.resample('D').ffill()
现在,我们每天都有这样的条目:
column_1 column_2 2018-01-01 31 62 2018-01-02 31 62 2018-01-03 31 62 2018-01-04 31 62 ... 2018-02-25 28 56 2018-02-26 28 56 2018-02-27 28 56 2018-02-28 28 56
但我们还没做完。我们仍然需要显示这些月值的日平均值。为了做到这一点,我们需要知道每个日历月的天数。以下步骤允许我们获得每个月的天数,然后计算列中每行的每日平均值,而不使用for循环:
daily = df.groupby(pd.Grouper(freq='M')).count() daily = daily.iloc[:,0] daily = daily.resample('D').ffill().rename('days_in_month') df = df.join(daily) cols = ['column_1', 'column_2'] for col in cols: df[col] = df[col]/df['days_in_month'] df = df.drop('days_in_month', axis=1)
现在,我们的数据帧采用了正确的格式,并显示每个月值的平均日值(该月的日历天数的平均值):
column_1 column_2 2018-01-01 1.0 2.0 2018-01-02 1.0 2.0 2018-01-03 1.0 2.0 2018-01-04 1.0 2.0 2018-01-05 1.0 2.0 ... 2018-02-24 1.0 2.0 2018-02-25 1.0 2.0 2018-02-26 1.0 2.0 2018-02-27 1.0 2.0 2018-02-28 1.0 2.0
可以按照以下步骤将数据帧的行从每月值扩展到每日值,然后在列中显示每个每月值的平均每日值。你知道吗
让我们从一个与您给出的示例类似的数据帧开始,但仅针对一月和二月:
看起来像:
现在我们需要重新格式化索引中月份的显示方式,以便将索引的数据类型更改为period_range:
运行以下行可以将每月的行转换为每天的行:
现在,我们每天都有这样的条目:
但我们还没做完。我们仍然需要显示这些月值的日平均值。为了做到这一点,我们需要知道每个日历月的天数。以下步骤允许我们获得每个月的天数,然后计算列中每行的每日平均值,而不使用for循环:
现在,我们的数据帧采用了正确的格式,并显示每个月值的平均日值(该月的日历天数的平均值):
相关问题 更多 >
编程相关推荐