微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从每个季度检索3个月,因此使df行数增加3倍熊猫,Python

如何解决如何从每个季度检索3个月,因此使df行数增加3倍熊猫,Python

我的任务很愚蠢,但是还没有找到解决方法我有一个很大的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个子数据帧连接在一起。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。