让我们以这个简单的数据集为例:
example_set = pd.DataFrame(data = {"dirr":[1,0,-1,-1,1,-1,0],
"value": [125,130,80,8,150,251,18],
"result":[np.NaN for _ in range(7)]})
下一行返回error:invalid syntax
example_set["result"].apply(lambda x : example_set["value"]if x["dirr"]==1)
谁能告诉我我做错了什么? 请不要想出没有 lambda 的解决方案:这只是我为隔离问题而编造的 super 简化示例。
请您参考如下方法:
您需要在 lambda 语句中包含 else 返回值:
In [7]:
example_set['result'] = example_set.apply(lambda x: x['value'] if x['dirr'] == 1 else x['result'], axis = 1)
example_set
Out[7]:
dirr result value
0 1 125.0 125
1 0 NaN 130
2 -1 NaN 80
3 -1 NaN 8
4 1 150.0 150
5 -1 NaN 251
6 0 NaN 18
你的尝试:
example_set["result"].apply(lambda x : example_set["value"]if x["dirr"]==1)
本质上缺少 else 返回值,您还需要 x['value'] 而不是整个 df,使用整个 df 会产生奇怪且不受欢迎的返回结果即使声明已更正:
In [14]:
example_set.apply(lambda x: example_set['value'] if x['dirr'] == 1 else example_set['result'], axis = 1)
Out[14]:
0 1 2 3 4 5 6
0 125.0 130.0 80.0 8.0 150.0 251.0 18.0
1 NaN NaN NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN NaN NaN
4 125.0 130.0 80.0 8.0 150.0 251.0 18.0
5 NaN NaN NaN NaN NaN NaN NaN
6 NaN NaN NaN NaN NaN NaN NaN
