熊猫根据许多其他列的条件逻辑添加新列

克沃特

我有一个这样的熊猫数据框:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章