Chi*_* Yi 5 python series apply pandas array-broadcasting
我有一个df_tr像这样的数据框:
item_id target target_sum target_count
0 0 0 1 50
1 0 0 1 50
Run Code Online (Sandbox Code Playgroud)
我试图找到目标的平均值,但排除当前行的目标值,并将平均值放入新列中。结果将是:
item_id target target_sum target_count item_id_mean_target
0 0 0 1 50 0.02041
1 0 0 1 50 0.02041
Run Code Online (Sandbox Code Playgroud)
我item_id_mean_target从公式计算值:
target_sum - target/target_count - 1
Run Code Online (Sandbox Code Playgroud)
...用这个代码:
df_tr['item_id_mean_target'] = df_tr.target.apply(lambda x: (x['target_sum']-x)/(x['target_count']-1))
Run Code Online (Sandbox Code Playgroud)
我认为我的解决方案是正确的,但我得到了:
TypeError: 'float' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)
不需要在这里申请,pandas(以及numpy)广播操作。
df['item_id_mean_target'] = (df.target_sum - df.target) / (df.target_count - 1)
Run Code Online (Sandbox Code Playgroud)
df
item_id target target_sum target_count item_id_mean_target
0 0 0 1 50 0.020408
1 0 0 1 50 0.020408
Run Code Online (Sandbox Code Playgroud)
至于为什么会发生错误,您正在调用apply一个pd.Series对象,因此,您不能引用其中的任何其他列apply(因为它只接收标量值)。
要修复它,您需要这样做df.apply(...),但此时您会因性能低下而受到惩罚,因此,我不建议这样做。
| 归档时间: |
|
| 查看次数: |
15000 次 |
| 最近记录: |