繁体   English   中英

Pandas:根据布尔条件更改多列中的值

[英]Pandas: Change values in multiple columns according to boolean condition

这应该是一个简单的事情,但不知怎的,我无法围绕在熊猫中选择和掩盖事物的所有不同方式。

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

我已经尝试了类似的东西,由于尺寸不匹配而无效:

df.loc[df[my_cols]>0, my_cols] = 1

这也行不通(因为我试图改变错误列中的值,我认为):

df[df[my_cols]>0] = 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

一些更高级的Pandas用户可以提供帮助吗? 谢谢。

所以这就是我最终得到了预期的结果,但我觉得必须有更多的熊猫式解决方案来完成这项任务。

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

我很确定有更优雅的方式,但这应该有效:

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()来获取整个列的条件

试试pandas.DataFrame.where

返回与self相同形状的对象,其对应的条目来自self,其中cond为True,否则来自其他。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM