将数据帧中的周格式(如201729)转换为新列中的月格式,其中日期是第一个星期一

2024-10-05 11:04:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我找到了这个,但语法不正确。你知道吗

time.asctime(time.strptime('2017 28 1', '%Y %W %w')) 

我想为七月设置一个新列,以“201707”格式显示月份。它可以是int64或string,而不必是列中的实际可读日期。你知道吗

我的数据帧列['Week']的格式也是201729,即YYYYWW

 dfAttrition_Billings_KPIs['Day_1'] = \
  time.asctime(time.strptime(dfAttrition_Billings_KPIs['Week'].str[:4] 
     + dfAttrition_Billings_KPIs['Month'].str[:-2] - 1 + 1', '%Y %W %w'))

因此,我希望在新字段month 201707中显示具有week 201729的行的输出。输出取决于“Week”中的行值。你知道吗

我有一百万条记录,所以希望尽可能避免行、lambda和慢函数的迭代:)


Tags: 数据stringtime格式语法week月份str
1条回答
网友
1楼 · 发布于 2024-10-05 11:04:02

使用^{}和参数format以及add 1表示Mondays,last表示格式YYYYMM使用^{}

df = pd.DataFrame({'date':[201729,201730,201735]})

df['date1']=pd.to_datetime(df['date'].astype(str) + '1', format='%Y%W%w')
df['date2']=pd.to_datetime(df['date'].astype(str) + '1', format='%Y%W%w').dt.strftime('%Y%m')
print (df)
     date      date1   date2
0  201729 2017-07-17  201707
1  201730 2017-07-24  201707
2  201735 2017-08-28  201708

如果需要从datetime转换为weeks自定义格式:

 df = pd.DataFrame({'date':pd.date_range('2017-01-01', periods=10)})

df['date3'] = df['date'].dt.strftime('%Y %W %w')
print (df)
        date      date3
0 2017-01-01  2017 00 0
1 2017-01-02  2017 01 1
2 2017-01-03  2017 01 2
3 2017-01-04  2017 01 3
4 2017-01-05  2017 01 4
5 2017-01-06  2017 01 5
6 2017-01-07  2017 01 6
7 2017-01-08  2017 01 0
8 2017-01-09  2017 02 1
9 2017-01-10  2017 02 2

相关问题 更多 >

    热门问题