【发布时间】:2026-02-03 16:35:01
【问题描述】:
我可以通过定义用户函数然后使用 apply 在 Panda 中添加一个新列。但是,我想使用 lambda 来做到这一点;有办法吗?
例如,df 有两列 a 和 b。我想创建一个新列c,它等于a 和b 之间的最长长度。
类似的东西:
df['c'] = df.apply(lambda x, len(df['a']) if len(df['a']) > len(df['b']) or len(df['b']) )
一种方法:
df = pd.DataFrame({'a':['dfg','f','fff','fgrf','fghj'], 'b' : ['sd','dfg','edr','df','fghjky']})
df['c'] = df.apply(lambda x: max([len(x) for x in [df['a'], df['b']]]))
print df
a b c
0 dfg sd NaN
1 f dfg NaN
2 fff edr NaN
3 fgrf df NaN
4 fghj fghjky NaN
【问题讨论】:
-
修复语法错误后即可使用。
lambda x后面需要一个冒号,而你的表达式缺少else(也许应该用它代替or)。 -
感谢您的快速响应,但仍然无法正常工作。这是代码和错误消息。如果您能提供任何帮助,我将不胜感激。 df = pd.DataFrame({'a':['dfg','f','fff','fgrf','fghj'],'b': ['sd','dfg','edr', 'df','fghjky']}) df['c'] = df.apply(lambda x: len(x['a']) if len(x['a']) > len(x['b ']) else len(x['b'])) KeyError: ('a', u'occurred at index a')
-
请不要将代码放入 cmets,edit 改为问题。
-
对不起,这是我第一次来这里。我尝试编辑我的问题,但它仍然没有以一种很好的格式出现
-
在编辑模式下,有一个打开格式化帮助的按钮。首先,您可以选择代码并按 Ctrl-K,它将缩进 4 个空格。
标签: python pandas lambda multiple-columns calculated-columns