更改从 pandas 数据框获得的 slice/series 的年份
Changing the year of a slice/series obtained from a pandas dataframe
我得到了一个大型数据集,它是为我的团队导入的时间表(跨越多年)。我清理了数据(使其变长而不是变宽),但是我遇到了问题。
先解释一下数据:
- 'year'和'period'是从split sheetname中得到的。两个字符串。
- 'week'一年中的第几周,从花名册中获得。浮动。
- 'date' 从字符串转换而来,我为此编写了一个函数,因为日期是荷兰语并且需要标准化,没有定义年份,因此使用第一列中的年份。加工后;日期时间格式。
- 'shift'所属班次类型。 S1 > 早,S2 > 晚,S3 > 夜。
- 每条规则都分配给了我的一名员工,出于隐私原因,这些名字已被删除。
- 我写了一个class,其中包含几种应用我们政府按计划执行的规则的方法。
现在我的问题是:
如您所见:条目 1137 和 1138 应该属于 2022 年。但是如何轻松更改它?我试过了:
for week, date in prepocessed_data_merged[['week', 'date']].values:
# There are always more than 52 weeks in a year.
# If the month of the date in week 52 is 1 (Jan), then something is wrong.
if (week == 52) & (date.month == 1):
prepocessed_data_merged.loc[(prepocessed_data_merged['week'] == week)
& (prepocessed_data_merged['date']), 'date'] = ???
但正如您所料,这 returns 是一个系列,因为一天有三班轮班,因此需要更改年份的日期的三个条目。那么,如何更改所选 series/slice 的年份,同时在数据框中更改它?
我知道我可以使用:dt.replace(year=current_year+1)
但我如何在 preprocessed_data DF 中的这个选定系列上强制执行此 replace
?提前致谢!
你试过了吗:
cond = prepocessed_data_merged['week'].eq(52) & prepocessed_data_merged['date'].dt.month.eq(1)
prepocessed_data_merged.loc[cond, 'date'] += pd.DateOffset(years=1)
我得到了一个大型数据集,它是为我的团队导入的时间表(跨越多年)。我清理了数据(使其变长而不是变宽),但是我遇到了问题。
先解释一下数据:
- 'year'和'period'是从split sheetname中得到的。两个字符串。
- 'week'一年中的第几周,从花名册中获得。浮动。
- 'date' 从字符串转换而来,我为此编写了一个函数,因为日期是荷兰语并且需要标准化,没有定义年份,因此使用第一列中的年份。加工后;日期时间格式。
- 'shift'所属班次类型。 S1 > 早,S2 > 晚,S3 > 夜。
- 每条规则都分配给了我的一名员工,出于隐私原因,这些名字已被删除。
- 我写了一个class,其中包含几种应用我们政府按计划执行的规则的方法。
现在我的问题是:
如您所见:条目 1137 和 1138 应该属于 2022 年。但是如何轻松更改它?我试过了:
for week, date in prepocessed_data_merged[['week', 'date']].values:
# There are always more than 52 weeks in a year.
# If the month of the date in week 52 is 1 (Jan), then something is wrong.
if (week == 52) & (date.month == 1):
prepocessed_data_merged.loc[(prepocessed_data_merged['week'] == week)
& (prepocessed_data_merged['date']), 'date'] = ???
但正如您所料,这 returns 是一个系列,因为一天有三班轮班,因此需要更改年份的日期的三个条目。那么,如何更改所选 series/slice 的年份,同时在数据框中更改它?
我知道我可以使用:dt.replace(year=current_year+1)
但我如何在 preprocessed_data DF 中的这个选定系列上强制执行此 replace
?提前致谢!
你试过了吗:
cond = prepocessed_data_merged['week'].eq(52) & prepocessed_data_merged['date'].dt.month.eq(1)
prepocessed_data_merged.loc[cond, 'date'] += pd.DateOffset(years=1)