Python 使用lambda函数创建新的数据帧字段

Python 使用lambda函数创建新的数据帧字段,python,pandas,dataframe,lambda,list-comprehension,Python,Pandas,Dataframe,Lambda,List Comprehension,我正在尝试根据其他列上的条件创建新列。 (数据帧已由用户加总) 这是数据帧的一个示例: event_names country ["deleteobject", "getobject"] ["us"] ["getobject"] ["ca"] ["deleteobject

我正在尝试根据其他列上的条件创建新列。
(数据帧已由用户加总)
这是数据帧的一个示例:

event_names                          country  
["deleteobject", "getobject"]         ["us"]
["getobject"]                         ["ca"]
["deleteobject", "putobject"]         ["ch"]
我想创建3个新列:
是否删除了数据?
是否下载了数据?
这些活动是否来自我的白名单国家
白名单国家=[“美国”、“sg”]

像这样:

event_names                      country  was_data_deleted?   was_data_downloaded?  whitelisted_country?
["deleteobject","getobject"]      ["us"]         True                 True                 True             
["getobject"]                     ["ca"]         False                True                 False
["deleteobject","putobject"]      ["ch"]         True                 False                False
这就是我迄今为止所尝试的:

result_df['was_data_deleted'] = result_df['event_name'].apply(lambda x:True if any("delete" in x for i in x) else False)

result_df['was_data_downloaded'] = result_df['event_name'].apply(lambda x:True if "getObject" in i for i in x else False)

result_df['strange_countries'] = result_df['country'].apply(lambda x:False if any(x in WHITELISTED_COUNTRIES for x in result_df['country']) else False)
我收到一个错误“语法错误:无效语法”

有什么想法吗?谢谢

df['was_data_deleted'] = df['event_names'].apply(lambda x: 'deleteobject' in x)
df['was_data_downloaded'] = df['event_names'].apply(lambda x: 'getobject' in x)
df['whitelisted_country'] = df['country'].apply(lambda x: x[0] in WHITELISTED_COUNTRIES)

print(df)
印刷品:

                 event_names country  was_data_deleted  was_data_downloaded  whitelisted_country
0  [deleteobject, getobject]  [us]    True              True                 True               
1  [getobject]                [ca]    False             True                 False              
2  [deleteobject, putobject]  [ch]    True              False                False              

您可以使用remove
if else
True、False
简化lambda函数,因为比较后的值已经返回:

WHITELISTED_COUNTRIES = ["us", "sg"]

#checked substring delete
f1 = lambda x: any("delete" in i for i in x)
result_df['was_data_deleted'] = result_df['event_names'].apply(f1)

#checked string "getobject"
f2 = lambda x:"getobject" in x
result_df['was_data_downloaded'] = result_df['event_names'].apply(f2)

#checked list
f3 = lambda x:any(y in WHITELISTED_COUNTRIES for y in x)
result_df['strange_countries'] = result_df['country'].apply(f3)

print (result_df)
                 event_names country  was_data_deleted  was_data_downloaded  \
0  [deleteobject, getobject]    [us]              True                 True   
1                [getobject]    [ca]             False                 True   
2  [deleteobject, putobject]    [ch]              True                False   

   strange_countries  
0               True  
1              False  
2              False  

您只在中间语句中忽略了小括号,ReultTydf [ `WasyDATAYEnLoad’] = ReultTydf [ 'EvestRoNeNe] ]。(lambda x:TRUE IF(“GETObjor”在I中为I在X中)其他错误),所有的工作在现有实现中都很好。或者根据提供的答案编写更好的代码。@orsa-Super!如果我的回答有帮助,别忘了。谢谢