在数据框中的其他列上使用Apply函数的新列

时间:2018-10-28 16:16:27

标签: python pandas apply

我有一个数据框,其中三列是数据坐标(“ H_x”,“ H_y”和“ H_z”)。我想计算数据的半径向量,并将其作为新列添加到数据框中。但是我对熊猫应用功能有些疑问。 我的代码是:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type='checkbox' class="chTrigger" name='182,500' value='182,500'> Below QAR 182,500 
<input type='checkbox' class="chTrigger" name='182,500plus' value='182,500plus'> Above QAR 182,500 – Below QAR 365,000
<input type='checkbox' class="chTrigger" name='365,000' value='365,000'> Above QAR 365,000

<span class="custom-link btn border-width-0 info-submit btn-color-xsdn btn- outline btn-icon-left">Submit</span>

我得到的错误是:

def radvec(x, y, z):
    rv=np.sqrt(x**2+y**2+z**2)
    return rv

halo_field['rh_field']=halo_field.apply(lambda row: radvec(row['H_x'], row['H_y'], row['H_z']), axis=1)

我得到了想要的列,但是我仍然对该错误消息感到困惑。 我知道这里也有类似的问题,但是我找不到解决问题的方法。我是python的新手。你能帮忙吗?

编辑: group_sh.py:78: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: http://pandas.pydata.org/pandas- docs/stable/indexing.html#indexing-view-versus-copy halo_field['rh_field']=halo_field.apply(lambda row: radvec(row['H_x'], row['H_y'], row['H_z']), axis=1) 是另一个数据框的一部分:

halo_field

1 个答案:

答案 0 :(得分:2)

问题是您正在使用切片,这可能是模棱两可的:

halo_field = halo_res[halo_res.N_subs==1]

您有两个选择:

处理副本

您可以显式复制数据框以避免警告,并确保原始数据框不受影响:

halo_field = halo_res[halo_res.N_subs==1].copy()
halo_field['rh_field'] = halo_field.apply(...)

有条件地处理原始数据框

使用pd.DataFrame.loc和布尔型掩码来更新原始数据框:

mask = halo_res['N_subs'] == 1
halo_res.loc[mask, 'rh_field'] = halo_res.loc[mask, 'rh_field'].apply(...)

请勿使用apply

作为一个补充说明,在任一方案中,您都可以避免使用apply来实现其功能。例如:

halo_field['rh_field'] = (halo_field[['H_x', 'H_y', 'H_z']]**2).sum(1)**0.5