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!如果我的回答有帮助,别忘了。谢谢