问题描述
我的任务很愚蠢,但是还没有找到解决方法, 我有一个很大的df,这是头
Deal Date Period Name Price Quarter Start Quarter End
0 2011-11-01 2011-Q4 30.76 2011-10-01 2011-12-31 23:59:59.999999999
1 2011-11-01 2012-Q1 30.95 2012-01-01 2012-03-31 23:59:59.999999999
2 2011-11-01 2012-Q2 30.67 2012-04-01 2012-06-30 23:59:59.999999999
3 2011-11-01 2012-Q3 29.87 2012-07-01 2012-09-30 23:59:59.999999999
4 2011-11-01 2012-Q4 29.49 2012-10-01 2012-12-31 23:59:59.999999999
我希望有一个额外的列显示“ month”,上面的5行将变为15行,例如初始行0将重复两次
Deal Date Period Name Price Quarter Start Quarter End Month
0 2011-11-01 2011-Q4 30.76 2011-10-01 2011-12-31 23:59:59.999999999 10
1 2011-11-01 2011-Q4 30.76 2011-10-01 2011-12-31 23:59:59.999999999 11
2 2011-11-01 2011-Q4 30.76 2011-10-01 2011-12-31 23:59:59.999999999 12
因为第四季度包括这三个月... 其余行类似。
有没有简单的方法可以做到这一点?谢谢
解决方法
您可以从周期中提取四分之一值,然后对只有12行包含四分之一->月映射的数据框执行pandas.merge。
简化的示例代码:
import pandas as pd
df_test = pd.DataFrame({'quart':[1,2,3,4,1,2],'val': ['a','b','c','d','e','f']})
df_quart_to_month = pd.DataFrame({'quart':[1,4],'month': [1,5,6,7,8,9,10,11,12]})
df_with_months = df_test.merge(df_quart_to_month,on='quart',how='outer')
如果要保留原始顺序:
df_with_months = df_test.reset_index().merge(df_quart_to_month,how='outer').set_index('index')
df_sorted = df_with_months.sort_values(['index','month'],ascending=[True,True])
或者,您可以将数据集根据其季度划分为4个数据帧,将每个子数据帧复制两次并添加相应的月份。然后将所得的12个子数据帧连接在一起。