如何在python数据帧中执行四分之一?

2024-06-16 08:27:15 发布

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

我有一个数据帧df1:

     Date     Number
0 Jan-2017       20
1 Sep-2021       30
2 Jul-2021       40
3 Mar-2017       50
4 Apr-2020       60
5 Jun-2020       70
6 Feb-2017       80

“日期”列的数据类型为“对象”

我需要将“日期”按季度分组,如

1st quater -->(Jan,Feb,Mar)
2nd quater -->(Apr,May,Jun)
3rd quater -->(Jul,Aug,Sep)
4th quater -->(Oct,Nov,Dec)

对“数字”列求和

预期输出如下:

     Date     Number
0 Q1-2017       150
1 Q3-2021        70
2 Q2-2020       130

谢谢您抽出时间:)


Tags: 数据对象numberdateaprjunmarsep
3条回答

使用^{}+^{}+^{}:

df_out = (df.assign(Date=pd.to_datetime(df['Date'], format='%b-%Y'))
            .resample('Q', on='Date', kind='period')
            .sum()
            .query('Number != 0')
         ).reset_index()

结果:

print(df_out)

     Date  Number
0  2017Q1     150
1  2020Q2     130
2  2021Q3      70

groupby可以使用datetime属性完成(确保Date列是datetime,即df['Date'] = pd.to_datetime(df['Date'])):

>>> df.groupby([df['Date'].dt.quarter, df['Date'].dt.year]).sum()
           Number
Date Date        
2017 1        150
2020 2        130
2021 3         70

只需重新命名索引即可。您可以通过以下方式实现指定的格式:

df = df.groupby([df['Date'].dt.quarter, df['Date'].dt.year]).sum()
df.index = df.index.set_names(['Quarter', 'Year'])
q = df.index.get_level_values('Quarter').astype(str)
y = df.index.get_level_values('Year').astype(str)
df.index = 'Q'+ q + '-' + y

给予:

         Number
Q1-2017     150
Q2-2020     130
Q3-2021      70

您还可以尝试以下方法:

df.groupby(pd.to_datetime(df['Date'], format='%b-%Y').dt.to_period('Q'))['Number'].sum()

输出:

Date
2017Q1    150
2020Q2    130
2021Q3     70
Freq: Q-DEC, Name: Number, dtype: int64

相关问题 更多 >