如何使用固定列迭代pandas数据帧的每一行,并根据python中的条件执行操作?

如何使用固定列迭代pandas数据帧的每一行,并根据python中的条件执行操作?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧,我正在计算时差,由于一些问题,我的一些时差小于0(零),现在我想迭代这个数据,并检查条件,如果时差小于0,那么我想给它添加一个特定的值 是图像,这是我得到的数据,我想操纵列“时间” 虽然我已经试过了 for row in df_all.rows: if df_all.iloc[row]['Time'].values >=43200: df_all.iloc[row]['Time']=df_all.iloc[row]['Time'].values-43

我有一个数据帧,我正在计算时差,由于一些问题,我的一些时差小于0(零),现在我想迭代这个数据,并检查条件,如果时差小于0,那么我想给它添加一个特定的值

是图像,这是我得到的数据,我想操纵列“时间”

虽然我已经试过了

for row in df_all.rows:
    if df_all.iloc[row]['Time'].values >=43200:
        df_all.iloc[row]['Time']=df_all.iloc[row]['Time'].values-43200
    elif df_all.iloc[row]['Time'].values <0:
        df_all.iloc[row]['Time']=df_all.iloc[row]['Time'].values+43200
    else:
        pass 
df_all.rows中的行的
:
如果df_all.iloc[row]['Time'].values>=43200:
df_all.iloc[row][Time']=df_all.iloc[row][Time'].values-43200

elif df_all.iloc[row]['Time'].values您不需要显式循环(
df.iterrows
)或隐式循环(
df.apply

相反,您可以使用矢量化的
pandas
功能:

df.loc[df['Time'] >= 43200, 'Time'] -= 43200
df.loc[df['Time'] < 0, 'Time'] += 43200
df.loc[df['Time']>=43200,'Time']-=43200
df.loc[df['Time']<0,'Time']+=43200
这将比任何循环都要快得多,而且可能更容易维护

下面是一些基准测试与基于循环的解决方案

绩效基准测试

import numpy as np, pandas as pd

df_all = pd.DataFrame({'Time':np.random.uniform(-500,50000, size=(10000,))})

def jp(df):
    df.loc[df['Time'] >= 43200, 'Time'] -= 43200
    df.loc[df['Time'] < 0, 'Time'] += 43200
    return df

def dl(df):
    def _time(x):
        _out = x
        if _out >= 43200:
            _out -= 43200
        if _out <0:
            _out += 43200
        return _out
    df['Time'] = list(map(_time,df['Time'].values))
    return df

%timeit jp(df_all)  # 3.5ms
%timeit dl(df_all)  # 8.5ms
将numpy作为np导入,将pandas作为pd导入
df_all=pd.DataFrame({'Time':np.random.uniform(-50050000,size=(10000,)})
def jp(df):
df.loc[df['Time']>=43200,'Time']-=43200
df.loc[df['Time']<0,'Time']+=43200
返回df
def dl(df):
定义时间(x):
_out=x
如果_out>=43200:
_out-=43200

如果您忘记了
列表
我的
地图
。你的解决方案更合适。