Python 如何使用dataframe中行中的字段查找和修改特定行?
我有这个数据集Python 如何使用dataframe中行中的字段查找和修改特定行?,python,pandas,Python,Pandas,我有这个数据集 time_in time_out total_mins 8AM 10AM 120 6AM 8AM 120 6AM 8AM -231 我想做的是得到错误的total_mins值,在本例中是变为负值的值。我想 确定总分钟数为负的记录(我同意) 重新计算timein和timeout差异,并覆盖现有的total_mins值 我发现了很多关于如何使用ix根据条件获取特定记录
time_in time_out total_mins
8AM 10AM 120
6AM 8AM 120
6AM 8AM -231
我想做的是得到错误的total_mins值,在本例中是变为负值的值。我想
我现在能想到的唯一选择是循环浏览记录,并执行测试和修改,但文档建议不要这样做。我认为您需要差分,得到并除以
60
几分钟
然后使用掩码更改值
:
mask = df['total_mins'] < 0
s = (pd.to_datetime(df.loc[mask, 'time_out'], format='%H%p') -
pd.to_datetime(df.loc[mask, 'time_in'], format='%H%p'))
.dt.total_seconds()
.div(60)
.astype(int)
print (s)
2 120
dtype: int32
df.loc[mask, 'total_mins'] = s
print (df)
time_in time_out total_mins
0 8AM 10AM 120
1 6AM 8AM 120
2 6AM 8AM 120
首先计算所有行的差异:
total_mins_computed = (pd.to_datetime(df.time_out, format='%H%p') - pd.to_datetime(df.time_in', format='%H%p')).dt.total_seconds()
如果只想更正否定项,请使用np.where()
:
total_mins_computed = (pd.to_datetime(df.time_out, format='%H%p') - pd.to_datetime(df.time_in', format='%H%p')).dt.total_seconds()
df['total_mins'] = np.where(df.total_mins > 0, df.total_mins, total_mins_computed)