我正在尝试从“时间”列中提取星期。
有什么解决方法吗?
下面的代码和结果:
import pandas as pd
#create df
df = pd.DataFrame(columns = ['TIME','FACILITY'])
df['TIME'] = ['12/30/2019 11:18:29 PM']
df['TIME']=pd.to_datetime(df['TIME'])
df['FACILITY'] = ['C201']
#Extract week
df['WW'] = df['TIME'].dt.week
答案 0 :(得分:3)
正如Maku所说,不幸的是,这在技术上是正确的。如果您确实希望所有2019年的日期都在该周的“一组”上,则进行手动修复:
df['M'] = df.dt.month
df['Y'] = df.dt.year
df['WW'] = df.dt.week
df['WW'] = df.apply(lambda x: df.loc[df.Y == x.Y, 'WW'].max() + 1 if x.WW == 1 and x.month = 12 else x.WW)
这基本上检查它是12月= 1的日期,并将其更改为该年的最后一部分。
注意:有了这个,2019-12-30在第53周,因为它是第52周星期日之后的星期一。
答案 1 :(得分:2)
从技术上讲,即使您应用dt.weekofyear
您可以改为使用lambda对其进行强制:
# Note: You can modify the static value '52' and make it more better
df['TIME'].apply(lambda x : 52 if x.year == 2019 else x.week)
答案 2 :(得分:2)
我认为这是您要寻找的:
import pandas as pd
df = pd.DataFrame(columns = ['TIME','FACILITY'])
df['TIME'] = ['12/30/2019 11:18:29 PM']
df['TIME']= pd.to_datetime(df['TIME'])
df['FACILITY'] = ['C201']
df['WW'] = df['TIME'].dt.strftime("%U")
print(df)
结果:
TIME FACILITY WW
0 2019-12-30 23:18:29 C201 52
答案 3 :(得分:0)
该问题的通用解决方案如下,数据框 temp 是一个带有时间戳和一年中的第几周的数据集
def weekofmonthc(dt1):
if (dt1.month == 12) and (dt1.weekofyear == 1):
mmaxw = temp[(temp['timestamp_utc'].dt.month == dt1.month) & (temp['timestamp_utc'].dt.year == dt1.year)]['timestamp_utc'].dt.weekofyear.max()
return (mmaxw + 1)
else:
return (dt1.weekofyear)
temp[(temp['timestamp_utc'] > '2014-12-30 23:00:00') & (temp['timestamp_utc'] < '2015-01-01 01:00:00')]['timestamp_utc'].apply(weekofmonthc)