为了账号安全,请及时绑定邮箱和手机立即绑定

跨列的 Pandas Lambda OR / AND 语句

跨列的 Pandas Lambda OR / AND 语句

繁华开满天机 2023-09-26 14:21:41
我正在尝试创建一个新列 [Check],它查看我的 [Color] 列和 [Size] 列,说明如果颜色为蓝色且大小大于 50,则该列应该是所有者,否则保留它空白的。IF 颜色 = 蓝色且尺寸 > 50,则 [所有者] ELSE null我有以下内容:df['Check'] = df['Color'].apply(lambda x,y: df['Owner'] if (x == 'Blue') & (y > 50) else null)我不知道该怎么做,告诉 apply 函数将 Color 作为 x,将 Size 作为 y。然后,对于 lambda 公式中的 OR/AND 语句,是否与过滤数据帧相同?
查看完整描述

2 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

apply您可以在列上使用,但也可以在数据框本身上使用它。如果您使用数据框,则需要提供一个轴(行或列)。

f = lambda row: row['Owner'] if (row['Color'] == 'Blue') & (row['Size'] > 50) else null

df['Check'] = df.apply(f,axis=1)


查看完整回答
反对 回复 2023-09-26
?
冉冉说

TA贡献1877条经验 获得超1个赞

这是否有效(无lambda功能):


df['Check'] = df['Owner'][(df['Color'] == 'Blue') & (df['Size'] > 50)]

我试过了


df = pd.DataFrame([['Blue', 25, 'Owner1'],

                   ['Blue', 55, 'Owner2'],

                   ['Green', 100, 'Owner3']],

                  columns=['Color', 'Size', 'Owner'])

并得到以下结果


   Color  Size   Owner   Check

0   Blue    25  Owner1     NaN

1   Blue    55  Owner2  Owner2

2  Green   100  Owner3     NaN

(使用apply-function时lambda只能采用一个参数。)


说明:(df['Color'] == 'Blue')并根据条件(df['Size'] > 50)创建带有True/值的系列(您可以打印它们)。False两个系列都通过逻辑AND(使用&)组合成一个新系列,还包含True/False值(现在根据 -AND组合条件)。最后,该列df['Owner']获取该系列并保留该系列具有Trueals 值的所有行,并用 填充其余部分NaN。


查看完整回答
反对 回复 2023-09-26
  • 2 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信