Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将yyyqn转换为yyyy-mm_Python_Pandas_Dataframe_Numpy_Datetime - Fatal编程技术网

Python 将yyyqn转换为yyyy-mm

Python 将yyyqn转换为yyyy-mm,python,pandas,dataframe,numpy,datetime,Python,Pandas,Dataframe,Numpy,Datetime,我有一个数据框: ID日期卷 2009年第1季度第9季度 2020Q2 11 2009年第2季度39 2020Q4 23 我想将其转换为yyyy Qn到datetime 我用字典把相应的日期映射到季度 但是在yyyy发生变化的情况下,我需要一个更通用的代码 预期产出: ID日期卷 1 2019-03 9 1 2020-06 11 2 2019-09 39 2 2020-12 23 这里有一个简单的解决方案,但效率不高(如果您的数据集不太大,应该

我有一个数据框:

ID日期卷
2009年第1季度第9季度
2020Q2 11
2009年第2季度39
2020Q4 23
我想将其转换为
yyyy Qn
datetime

我用字典把相应的日期映射到季度

但是在
yyyy
发生变化的情况下,我需要一个更通用的代码

预期产出:

ID日期卷
1    2019-03     9
1    2020-06    11
2    2019-09    39
2    2020-12    23

这里有一个简单的解决方案,但效率不高(如果您的数据集不太大,应该不会有问题)

使用to_datetime将日期列转换为datetime。 然后在每个日期加上2个月,因为您希望月是季度月的结束

df = pd.DataFrame({'date': ["2019Q1" ,"2019Q3", "2019Q2", "2020Q4"], 'volume': [1,2,3, 4]})
df['datetime'] = pd.to_datetime(df['date'])
df['datetime'] = df['datetime'] + pd.DateOffset(months=2)
输出相同

date    volume  datetime
0   2019Q1  1   2019-03-01
1   2019Q3  2   2019-09-01
2   2019Q2  3   2019-06-01
3   2020Q4  4   2020-12-01

让我们使用
pd.PeriodIndex

df['Date_new'] = pd.PeriodIndex(df['Date'], freq='Q').strftime('%Y-%m')
输出:

   ID    Date  Volume Date_new
0   1  2019Q1       9  2019-03
1   1  2020Q2      11  2020-06
2   2  2019Q3      39  2019-09
3   2  2020Q4      23  2020-12

你试了什么?请花点时间阅读。字典和地图。。但是需要一个更通用的代码。谢谢这个链接可能会帮助你:上一张唱片真的是W4而不是Q4吗?