将Python中的月度数据转换为日度数据

2024-05-17 20:01:22 发布

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

我试图将每月的数据点转换为每周的数据点,但为了达到这个目标,我将数据集分解为每日数据,然后将其聚合到周级别。当聚合发生时(通过groupby),我无法将数据分解为每日级别。在

Month_End_Date  A   B   C   D
2/28/2019   Pikachu Starter 100000  5302
2/28/2019   Jolteon Evolution   250000  7935
3/31/2019   Charmander  Starter 62810   5103
3/31/2019   Bulbasaur   Starter 16868   6035
4/30/2019   Flareon Evolution   62810   5103
4/30/2019   Eevee   Starter 16868   6035
5/31/2019   Glaceon Evolution   62810   5103
5/31/2019   Leafeon Evolution   16868   6035
6/30/2019   Umbreon Evolution   62810   5103
6/30/2019   Espeon  Evolution   16868   6035

我想把第一排改成

^{pr2}$

其中日值除以28(因为二月有28天)

我已经搜索了ffill,但无法完全解决问题


Tags: 数据目标date级别endstartergroupbyevolution
1条回答
网友
1楼 · 发布于 2024-05-17 20:01:22

首先通过^{}删除每列Month_End_Date的重复项,然后通过前向填充缺失值^{}每月和每年仅过滤28行:

#convert column to datetimes and then to first day of month
df['Month_End_Date'] = (pd.to_datetime(df['Month_End_Date'], format='%m/%d/%Y')
                         .dt.to_period('m').dt.to_timestamp())
df = df.drop_duplicates('Month_End_Date').set_index('Month_End_Date')
#for duplicated last row of data
df.loc[df.index[-1] + pd.offsets.MonthEnd(1)] = df.iloc[-1]
df = df.resample('d').ffill()

df1 = df[df.groupby(df.index.to_period('m')).cumcount() < 28]
print (df1.tail())
                      A          B      C     D
Month_End_Date                                 
2019-06-24      Umbreon  Evolution  62810  5103
2019-06-25      Umbreon  Evolution  62810  5103
2019-06-26      Umbreon  Evolution  62810  5103
2019-06-27      Umbreon  Evolution  62810  5103
2019-06-28      Umbreon  Evolution  62810  5103

如果需要所有值,不仅每个组第一个使用^{}resample链的groupby创建助手列:

^{pr2}$

相关问题 更多 >