将年月转换为 Date 而 GroupBy

Convert year-month into Date while GroupBy

我在 Dataframe 中有一个 PERIOD 列,格式为:

PERIOD   ACTUAL
202201   343.34 
202202   545.33
202203   54
202201   989.2

表示DMY格式01-01-2022, 01-02-2022, 01-03-2022

我在里面用:

groupedResult = df.groupby('PERIOD')['Actual'].sum()

如何将 PERIOD 值转换为 Python 中的日期?

我尝试继续,但卡住了:

groupedResult = df.groupby(datetime('PERIOD'.year, 'PERIOD'.month, 1))['Actual'].sum()

你的问题不是很清楚,因为没有一个可行的例子,但我在这里用我编造的数据为你解决了这个问题:

import pandas as pd

data = {'period':['202201','202201','202201','202201','202202','202202','202203'], 'actuals':[10,20,30,40,50,60,70]}
    
df = pd.DataFrame(data)
print("BEFORE:")

这给出了您描述的时间段,但它存储为对象而不是日期时间:

BEFORE:
   period  actuals
0  202201       10
1  202201       20
2  202201       30
3  202201       40
4  202202       50
5  202202       60
6  202203       70
print(df)

此处format='%Y%m'将其转换为日期时间(%Y%m 表示在传入字符串中搜索 YYYYMM)。然后 .dt.strftime('%Y/%m') 将其转换回对象格式类型,但采用您需要的日期格式。

df['period'] = pd.to_datetime(df['period'], format='%Y%m').dt.strftime('%Y/%m')

print("AFTER:")
groupedresults = df.groupby('period')['actuals'].sum()
print(groupedresults)

这是你的输出。更改期间的日期格式以满足您的需要:

AFTER:
period
2022/01    100
2022/02    110
2022/03     70
Name: actuals, dtype: int64