猿问

跨列的 Pandas Lambda OR / AND 语句

我正在尝试创建一个新列 [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 语句,是否与过滤数据帧相同?


繁华开满天机
浏览 166回答 2
2回答

噜噜哒

apply您可以在列上使用,但也可以在数据框本身上使用它。如果您使用数据框,则需要提供一个轴(行或列)。f = lambda row: row['Owner'] if (row['Color'] == 'Blue') & (row['Size'] > 50) else nulldf['Check'] = df.apply(f,axis=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   Check0   Blue    25  Owner1     NaN1   Blue    55  Owner2  Owner22  Green   100  Owner3     NaN(使用apply-function时lambda只能采用一个参数。)说明:(df['Color'] == 'Blue')并根据条件(df['Size'] > 50)创建带有True/值的系列(您可以打印它们)。False两个系列都通过逻辑AND(使用&)组合成一个新系列,还包含True/False值(现在根据 -AND组合条件)。最后,该列df['Owner']获取该系列并保留该系列具有Trueals 值的所有行,并用 填充其余部分NaN。
随时随地看视频慕课网APP

相关分类

Python
我要回答