使用if的Lambdas语法错误

时间:2017-01-02 16:01:11

标签: python pandas lambda

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

error:invalid syntax

以下行返回example_set["result"].apply(lambda x : example_set["value"]if x["dirr"]==1)

lambda

谁能告诉我我做错了什么? 如果没有chatHub.client.getOnlineUsers,请不要提出如何做到这一点的解决方案:这只是我用来隔离问题的一个超级简化示例。

1 个答案:

答案 0 :(得分:5)

您需要在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