如何解决如何根据布尔条件更改熊猫数据框中的单元格
我必须遵循数据帧。 我成功地删除了闰年这个数据框的所有 2 月 29 日,因为我打算按“年份”列(使用 .dt.dayofyear 创建)进行分组,并且我决定忽略闰年的额外一天。 现在,为了按“一年中的某一天”列进行分组,如果这一天是三月一日或更晚,我必须从闰年的天数中减去 1。否则,闰年将有 366 天而不是 355 天(即使删除了闰日)。
这是我的代码:
clim_rec = pd.read_csv("daily_climate_records.csv")
clim_rec['Date'] = pd.to_datetime(clim_rec['Date']) # converting "Date" column from string into datetime format
# Let's drop all leaping days by masking all Feb 29 days
feb_29_mask = ~((clim_rec.Date.dt.month == 2) & (clim_rec.Date.dt.day == 29))
clim_rec = clim_rec.where(feb_29_mask).dropna()
# Let's add new column with the "day of year" in order to group by this column
clim_rec['Day of year'] = clim_rec['Date'].dt.dayofyear
print(clim_rec.head())
#print('---------------------------------------------------')
# Now,if the year is a leap year and the dayofyear is greater than the dayofyear of Feb-29
# we subtract 1 from dayofyear. After doing that we will get values 1-365 for dayofyear
leap_year_mask = (clim_rec.Date.dt.year % 4 == 0) & ((clim_rec.Date.dt.year % 100 != 0)
|(clim_rec.Date.dt.year % 400 == 0)) & (clim_rec.Date.dt.month >=3)
clim_rec['Day of year'] = clim_rec['Day of year'].apply(lambda x: x-1) # this line is not correct
我的问题是: 如何修改附加代码的最后一行,以便仅对布尔掩码条件为真的特定行应用减法
解决方法
使用 DataFrame.loc
通过掩码选择行,更好/更快的是减去 1
而不是 apply
以避免循环(因为应用在引擎盖下使用循环):
clim_rec.loc[leap_year_mask,'Day of year'] -= 1
工作方式:
clim_rec.loc[leap_year_mask,'Day of year'] = clim_rec.loc[leap_year_mask,'Day of year']-1
,
这对你有用吗?克尔。
clim_rec['mask'] = leaf_year_mask
clim_rec['Day of year'] = clim_rec.apply(lambda x: x['Day of year']-1 if x['mask'] else x['Day of year'])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。