gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:07:05 25 4
gpt4 key购买 nike

我有一个包含一些二进制列 (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/

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