Python : 如何使用 lambda 函数来 return 一个特定的值?
Python : How to use lambda function to return a specific value?
我有一个包含“A”列的数据框,其值可以是这样的:
[';', '', 'M;', 'M', ';M', 'M;M', ';;M']
我想 return 我的第二列“B”中的值 'M' 如果我能在该行中找到“M”(如果有多个 M 也没关系)在 A 列上。如果没有 M,则 B 中的行应保持为空。
我无法将其转换为 lambda 函数。有人可以帮忙吗?
df['B']=df['A'].apply(lambda x:x[....... if 'M' in x else None])
只需在 if
关键字前使用您想要 return 的表达式:
df['B']=df['A'].apply(lambda x:'M' if 'M' in x else None)
理解这一点的关键是“lambda”将解析单个表达式,return 它的值,以及 [= 中的内联“... if ... else ...”构造19=] 根据测试表达式计算第一部分或最后一部分。
如果您没有在单个列中使用 apply,而是在整个数据框中使用(例如,如果您需要检查多个列中的值),则必须传递“axis=1”要应用的参数。在那种情况下,虽然不需要,但最好在 lambda 周围多加一对括号。否则,代码的读者将有责任确定将 lambda 主体与下一个参数分隔开的“,”是否真的是分隔符或 lambda 的一部分:
df['B']=df.apply((lambda row:'M' if 'M' in row['A'] else None), axis=1)
您不需要使用 lambda 函数。避免循环并使用 loc
和 str.contains
df = pd.DataFrame({'A': [';', '', 'M;', 'M', ';M', 'M;M', ';;M']})
df.loc[df['A'].str.contains('M'), 'B'] = 'M'
A B
0 ; NaN
1 NaN
2 M; M
3 M M
4 ;M M
5 M;M M
6 ;;M M
添加参数axis
,否则该函数将应用于每一列。
这将使代码像:
df["B"] = df.apply(lambda x: 'M' if ('M' in x['A']) else None ,axis=1)
我有一个包含“A”列的数据框,其值可以是这样的:
[';', '', 'M;', 'M', ';M', 'M;M', ';;M']
我想 return 我的第二列“B”中的值 'M' 如果我能在该行中找到“M”(如果有多个 M 也没关系)在 A 列上。如果没有 M,则 B 中的行应保持为空。 我无法将其转换为 lambda 函数。有人可以帮忙吗?
df['B']=df['A'].apply(lambda x:x[....... if 'M' in x else None])
只需在 if
关键字前使用您想要 return 的表达式:
df['B']=df['A'].apply(lambda x:'M' if 'M' in x else None)
理解这一点的关键是“lambda”将解析单个表达式,return 它的值,以及 [= 中的内联“... if ... else ...”构造19=] 根据测试表达式计算第一部分或最后一部分。
如果您没有在单个列中使用 apply,而是在整个数据框中使用(例如,如果您需要检查多个列中的值),则必须传递“axis=1”要应用的参数。在那种情况下,虽然不需要,但最好在 lambda 周围多加一对括号。否则,代码的读者将有责任确定将 lambda 主体与下一个参数分隔开的“,”是否真的是分隔符或 lambda 的一部分:
df['B']=df.apply((lambda row:'M' if 'M' in row['A'] else None), axis=1)
您不需要使用 lambda 函数。避免循环并使用 loc
和 str.contains
df = pd.DataFrame({'A': [';', '', 'M;', 'M', ';M', 'M;M', ';;M']})
df.loc[df['A'].str.contains('M'), 'B'] = 'M'
A B
0 ; NaN
1 NaN
2 M; M
3 M M
4 ;M M
5 M;M M
6 ;;M M
添加参数axis
,否则该函数将应用于每一列。
这将使代码像:
df["B"] = df.apply(lambda x: 'M' if ('M' in x['A']) else None ,axis=1)