Python 熊猫:根据布尔条件更改多列中的值

Python 熊猫:根据布尔条件更改多列中的值,python,pandas,Python,Pandas,这应该是一件简单的事情,但不知何故,我还不能用各种不同的方法来选择和掩盖熊猫身上的东西 因此,对于大数据帧(从csv文件读入),我想根据一些布尔条件(在相同的选定列上测试)更改列列表的值 我已经尝试过类似的方法,但由于尺寸不匹配,该方法不起作用: df.loc[df[my_cols]>0, my_cols] = 1 这也不起作用(因为我试图更改错误列中的值,我认为): 这不起作用,因为我只更改了数据帧的一个副本: df[my_cols][df[my_cols]>0] = 1 以下

这应该是一件简单的事情,但不知何故,我还不能用各种不同的方法来选择和掩盖熊猫身上的东西

因此,对于大数据帧(从csv文件读入),我想根据一些布尔条件(在相同的选定列上测试)更改列列表的值

我已经尝试过类似的方法,但由于尺寸不匹配,该方法不起作用:

df.loc[df[my_cols]>0, my_cols] = 1
这也不起作用(因为我试图更改错误列中的值,我认为):

这不起作用,因为我只更改了数据帧的一个副本:

df[my_cols][df[my_cols]>0] = 1
以下是
df.info
的输出:

Int64Index: 186171 entries, 0 to 186170
Columns: 737 entries, id to 733:zorg
dtypes: float64(734), int64(1), object(2)
memory usage: 1.0+ GB

一些更高级的熊猫可以帮助用户吗?多谢各位

我很确定还有一种更优雅的方式,但这应该是可行的:

df = pd.DataFrame(np.random.randint(5, size=(3,4)), columns = ['a','b','c','d'])
mycols =['a','b']
cols_tochange = df.columns[df[mycols].all()>1]
df.loc[:,cols_tochange]  = 1

请注意使用
all()
,以获取整列的条件

,因此这里是我最终获得所需结果的方式,但我觉得必须有一个更简单的解决方案来完成此任务

for col in my_cols:
    df.loc[df[col]>0, col] = 1 

尝试
pandas.DataFrame.where

返回一个与self形状相同的对象及其相应的条目 是来自自我,条件为真,否则来自他人

在您的情况下,这将成为:

df[my_cols] = df[my_cols].where(~(df[my_cols]>0),other=1)

很抱歉,您可以发布代码来演示它是如何工作的,正常情况下应该是这样的:
df[df[my_cols]>0]=1
当您返回多维数组并试图使用它进行索引时,您的第一次尝试将不起作用。什么是my_cols、列表或熊猫。索引?@EdChum:我收到了以下错误消息:“TypeError:无法对具有非np.nan值的混合类型进行就地布尔设置”。不过,我不知道如何解释它。@lib:这是一个带有列名的普通列表。这意味着您的列是混合数据类型,是一些整数还是字符串,而不是浮点数?是否可以从
df.info()发布输出
我不认为这是我想要的。我不想检查列中所有值的条件是否为真,但我想检查列中每个值的条件,并相应地更改(或不更改)值。啊,好的……是的,这将更改所有列
df[my_cols] = df[my_cols].where(~(df[my_cols]>0),other=1)