gpt4 book ai didi

python - Pandas 根据许多其他列的条件逻辑添加一个新列

转载 作者:行者123 更新时间:2023-12-04 21:28:32 25 4
gpt4 key购买 nike

我有一个像这样的 Pandas 数据框:

aa bb cc dd ee
a a b b foo
a b a a foo
b a a a bar
b b b b bar

如果第 1 到第 4 列中的值为 a,我想添加一个新列

结果是这样的:
aa bb cc dd ee  ff
a a b b foo a
a b a a foo a
b a a a bar a
b b b b bar b

逻辑是:
如果第 1 到第 4 列中的任何一个值是 a然后列 ffa否则是 b
我可以定义一个函数并手动执行每一列,例如:
def some_function(row);
if row['aa']=='a' or row['bb']=='a' or row['cc']=='a' or row[dd]=='a':
return 'a'
return 'b'

但我正在寻找一种可以扩展的解决方案 n列数。

感谢任何帮助!

最佳答案

使用 numpy.where 条件创建者 eq (==) 与 any 检查至少一个 True每行:

cols = ['aa','bb','cc', 'dd']
df['ff'] = np.where(df[cols].eq('a').any(1), 'a', 'b')
print (df)
aa bb cc dd ee ff
0 a a b b foo a
1 a b a a foo a
2 b a a a bar a
3 b b b b bar b

细节:
print (df[cols].eq('a'))
aa bb cc
0 True True False
1 True False True
2 False True True
3 False False False

print (df[cols].eq('a').any(1))
0 True
1 True
2 True
3 False
dtype: bool

如果需要自定义功能:
def some_function(row):
if row[cols].eq('a').any():
return 'a'
return 'b'

df['ff'] = df.apply(some_function, 1)
print (df)
aa bb cc dd ee ff
0 a a b b foo a
1 a b a a foo a
2 b a a a bar a
3 b b b b bar b

关于python - Pandas 根据许多其他列的条件逻辑添加一个新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46809141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com