使用if的Lambdas语法错误

jim*_*iat 1 python lambda pandas

我们以这个简单的数据集为例:

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)]})
Run Code Online (Sandbox Code Playgroud)

以下行返回 error:invalid syntax

example_set["result"].apply(lambda x : example_set["value"]if x["dirr"]==1)
Run Code Online (Sandbox Code Playgroud)

谁能告诉我我做错了什么?如果没有,请不要提出如何做到的解决方案lambda:这只是我为弥补我的问题而做出的一个超级简化的例子.

EdC*_*ica 5

您需要else在lambda语句中包含返回值:

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
Run Code Online (Sandbox Code Playgroud)

你的尝试:

example_set["result"].apply(lambda x : example_set["value"]if x["dirr"]==1)
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)