我有一个带有日期列的数据框。日期写为2002Q1,2002Q2,....
我希望每个季度有三行而不是一行,并将日期重命名为20020101、20020201和20020301作为第一季度的示例。
你有什么主意吗?谢谢
我的代码
list=pd.read_csv(r"C:\Usersxyx.csv", delimiter = ',', usecols=["date", "ID", 'Value'])
list['year'] = [str(i)[:4] for i in list["date"]]
list ['month']= [str(i)[5:6] for i in list["date"]]
blist= pd.DataFrame(np.repeat(list.values, 3, axis=0))
blist.columns = list.columns
我的想法是将行复制三遍。这样我每个月都有一行。现在我不知道如何在20010101 20010201中更改2001Q1的日期,等等。
答案 0 :(得分:1)
您可以遵循以下代码。 注意:请勿将数据框名称用作“列表”。我将名称更改为“ lista”
a1=pd.DataFrame([str(i)[0:4]+str((int(str(i)[5]))*3-2).zfill(2)+'01' for i in lista["date"]],columns= ['date1'])
a2=pd.DataFrame([str(i)[0:4]+str((int(str(i)[5]))*3-1).zfill(2)+'01' for i in lista["date"]],columns= ['date1'])
a3=pd.DataFrame([str(i)[0:4]+str((int(str(i)[5]))*3).zfill(2)+'01' for i in lista["date"]],columns= ['date1'])
pd.concat([a1,a2,a3])
pd.concat([pd.concat([lista,a1],axis=1),pd.concat([lista,a2],axis=1),pd.concat([lista,a3],axis=1)], ignore_index=True)