我正在尝试转换以下数据帧
id year week
1 2018 43
1 2019 1
2 2019 4
3 2018 51转换为包含以下列的数据帧
id year week year_week
1 2018 43 2018-43
1 2019 1 2019-1
2 2019 4 2019-4
3 2018 51 2018-51其中"year_week“是datetime类型
发布于 2019-03-22 03:33:24
您需要选择一周中的某一天,以便根据该数据创建时间戳。假设它们是ISO weeks,我选择"1“作为ISO周开始的星期一(还添加了一列以转换为问题中所示的字符串格式)。
如果您确实希望列数据是datetime objects而不是pandas.Timestamp,请参阅Converting between datetime and Timestamp objects,了解需要包含的另一个步骤。
from datetime import datetime
import pandas as pd
def year_week(y, w):
return datetime.strptime(f'{y} {w} 1', '%G %V %u')
df = pd.DataFrame([(2018, 43), (2019, 1), (2019, 4), (2018, 51)], columns=['year', 'week'])
df['year_week_ts'] = df.apply(lambda row: year_week(row.year, row.week), axis=1)
df['year_week_str'] = df.apply(lambda row: row.year_week_ts.strftime('%G-%V'), axis=1)
print(df)
# year week year_week_ts year_week_str
# 0 2018 43 2018-10-22 2018-43
# 1 2019 1 2018-12-31 2019-01
# 2 2019 4 2019-01-21 2019-04
# 3 2018 51 2018-12-17 2018-51
# for python 3 versions pre-3.6 use '{} {} 1'.format(y, w) instead of the f string above发布于 2019-06-29 20:59:54
您可能想要查看一下epiweeks包!
给定您提供的数据,并假设使用ISO周编号系统,假设您想要创建一个包含周结束日期的列:
from epiweeks import Week
df['ending'] = df.apply(
lambda row: pd.to_datetime(Week(row.year, row.week, 'iso').enddate()),
axis=1
)这会产生一个datetime类型的新列。
希望这就是你要找的。
https://stackoverflow.com/questions/55286754
复制相似问题