在Python中将月份和年份的列一起更改为季度和年份的列

时间:2020-08-07 18:58:51

标签: python pandas numpy

我有一个数据框

df = {'Month': [1, 8], 'Year': [2015, 2020]}
df = pd.DataFrame(data = df)
df

想将其突变为新列。

所需的输出:

df = {'Month': [1, 8], 'Year': [2015, 2020], 'Quarter': ['Q12015', 'Q32020']}
df = pd.DataFrame(data = df)
df

还要感谢您发表评论,使用scikit-learn处理此数据以进行建模的最佳方法是。目前,我正在考虑没有伪变量的字符串和类别变量,但是请感谢此处的任何提示。谢谢!

2 个答案:

答案 0 :(得分:6)

基本思想是将日期时间转换为to_period并转换为Q作为季度(您仍然可以优化此功能

df['Quarter'] = (pd.to_datetime(df[['Month','Year']].astype(str)
                   .agg('-'.join,1).radd("01-"),dayfirst=True).dt.to_period('Q'))

或者像@ Ben.T所说的那样,是一种更简单,更好的方法:

df['Quarter'] = pd.to_datetime(df[['Month','Year']].assign(day=1)).dt.to_period('Q')
print(df)

   Month  Year Quarter
0      1  2015  2015Q1
1      8  2020  2020Q3

答案 1 :(得分:2)

df['Quarter'] = df[['Year', 'Month']].astype(str).apply('-'.join,1)
df['Quarter'] = pd.PeriodIndex(pd.to_datetime(df['Quarter']), freq ='Q')