如何通过R或python将月值拆分为天值?

2024-04-19 00:16:39 发布

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

我的数据:

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   ..........

我想把每个月的平均值转换成日期值。你知道吗

我可以引用哪个函数来实现这一点? 非常感谢。你知道吗


Tags: 数据函数datecolumn平均值month
1条回答
网友
1楼 · 发布于 2024-04-19 00:16:39

可以按照以下步骤将数据帧的行从每月值扩展到每日值,然后在列中显示每个每月值的平均每日值。你知道吗

让我们从一个与您给出的示例类似的数据帧开始,但仅针对一月和二月:

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

相关问题 更多 >