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值,在本例中是变为负值的值。我想

  • 确定总分钟数为负的记录(我同意)
  • 重新计算timein和timeout差异,并覆盖现有的total_mins值
  • 我发现了很多关于如何使用ix根据条件获取特定记录的示例,但我不确定的是如何使用该行中的字段,并使用它们修改行中的特定字段。所以基本上是第二位


    我现在能想到的唯一选择是循环浏览记录,并执行测试和修改,但文档建议不要这样做。

    我认为您需要差分,得到并除以
    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)