Python 如何在遍历行时向dataframe添加新列?

Python 如何在遍历行时向dataframe添加新列?,python,pandas,Python,Pandas,我想使用一些已经存在的列生成一个新列。但是我认为使用apply函数太难了。在遍历此数据帧时,是否可以生成新列(ftp\u price此处)?这是我的密码。当我调用product\u df['ftp\u price']时,我得到了一个关键错误 对于索引,在product_df.iterrows()中的行: 当前_曲线_类型_-df=曲线_-df[曲线_-df['curve_-Subrogate_-key']==行['curve_-Subrogate_-key_-x']] min_tmp_df=行[

我想使用一些已经存在的列生成一个新列。但是我认为使用
apply
函数太难了。在遍历此数据帧时,是否可以生成新列(
ftp\u price
此处)?这是我的密码。当我调用
product\u df['ftp\u price']
时,我得到了一个关键错误

对于索引,在product_df.iterrows()中的行:
当前_曲线_类型_-df=曲线_-df[曲线_-df['curve_-Subrogate_-key']==行['curve_-Subrogate_-key_-x']]
min_tmp_df=行['start_date']-当前曲线类型_df['DATA_map']。应用(解析)
min_tmp_df=min_tmp_df[min_tmp_df>timedelta(天数=0)]
曲线=当前曲线类型df.loc[min\u tmp\u df.idxmin()]
tmp_diff=行['end_time']-np.array(行['start_time'])
如果np.isin(0,tmp_diff):
idx=np.其中(tmp_diff==0)
col_name=col_name[idx[0][0]]
行['ftp_price']=曲线[col_name]
其他:
idx=np.argmin(tmp_diff>0)
p_加1_比率=曲线[COL_名称[idx]]
p_减1_比率=曲线[COL_名称[idx-1]]
d加上一天=行['开始日期]+比率映射记录[列名称[idx]]
d_减去一天=行['start_date']+比率映射记录[COL_NAMES[idx-1]]
第[‘ftp价格’]=p_减1_费率+(p_加1_费率-p_减1_费率)*(第[‘开始日期’]-d_减1_天数)/(d_加1_天数-d_减1_天数)

行可以是视图或副本(通常是副本),因此更改它不会更改原始数据帧。正确的方法是始终使用
loc
iloc
更改原始数据帧:

product_df.loc[index, 'ftp_price'] = ...

也就是说,您应该尽量避免在可能的情况下显式地迭代数据帧的行…

行可以是视图或副本(通常是副本),因此更改它不会更改原始数据帧。正确的方法是始终使用
loc
iloc
更改原始数据帧:

product_df.loc[index, 'ftp_price'] = ...

也就是说,您应该尽量避免在可能的情况下显式地迭代数据帧的行…

为特定索引设置新值的替代方法是使用
at

for index, row in product_df.iterrows():
    product_df.at[index, 'ftp_price'] = val

此外,您应该阅读

为特定索引设置新值的另一种方法是使用at:

for index, row in product_df.iterrows():
    product_df.at[index, 'ftp_price'] = val

此外,您应该阅读

将值添加到列表中,然后在使用列表完成循环后创建
ftp\u price
列?我想知道列表是否比直接在数据帧上做一些更改占用更多内存。但是使用列表很容易。@Sid将值添加到列表中,然后在使用列表完成循环后创建
ftp\u price
列?在我看来,这可能不那么令人头痛。我想知道列表是否比直接在数据帧上进行某些更改占用更多内存。不过,使用列表很容易。@Sid