如何使用固定列迭代pandas数据帧的每一行,并根据python中的条件执行操作?
我有一个数据帧,我正在计算时差,由于一些问题,我的一些时差小于0(零),现在我想迭代这个数据,并检查条件,如果时差小于0,那么我想给它添加一个特定的值 是图像,这是我得到的数据,我想操纵列“时间” 虽然我已经试过了如何使用固定列迭代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
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
如果您忘记了列表
我的地图
。你的解决方案更合适。