Python Pandas DF 根据列列表创建新变量

标签 python pandas dataframe

我有一个包含一些二进制列 (1,-1) 的 df 和一个包含 N 个列名的列表。 我需要创建一个像这样的新变量...

df['test'] = np.where(((df['Col1']==-1) & (df['Col2']==-1)), -1, 0)

...但是是动态的。所以规则是:如果列表中的所有列都具有相同的值 (1,-1),则采用它。否则值= 0。列表的长度不固定。我可以简单地迭代列表并创建“where-String”还是有更优雅的方法?

谢谢!

最佳答案

IIUC 你可以做

df['test'] = np.where((df[list_of_col_names] == -1).all(axis=1), -1, 0)

因此,在这里您只需传递感兴趣的列列表即可从原始 df 中进行子选择,因为您所做的就是将所有感兴趣的列与标量值进行比较,然后执行 all(axis= 1) 测试所有行值是否与该值匹配,并像以前一样将 bool 掩码传递给 np.where

例如:

list_of_col_names = ['col1','col2']
df['test'] = np.where((df[list_of_col_names] == -1).all(axis=1), -1, 0)

传递一个实际的名称列表或可迭代对象非常重要,如果这样做,将会引发一个KeyError:

df['test'] = np.where((df['col1','col2'] == -1).all(axis=1), -1, 0)

因为它会将其解释为一个元组,并且该列'col1','col2'可能不存在

关于Python Pandas DF 根据列列表创建新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44563667/

相关文章:

python - "or"条件导致 "if"出现问题

python - numpy 库的“包含”?

python - 将一个数据帧的索引映射到另一个数据帧的列

python - 删除数据框中许多列具有相同值的行

python - 属性错误 : 'DataFrame' object has no attribute 'get_dtype_counts'

python - 将包含字符串时间格式的列转换为分钟

整数对象上的Python调用方法

python - 在python中解析bson字符串?

python - 在 Python 脚本中实现多线程

来自具有多列的 Pandas 数据框的 Python 散点图