Pandas中如何对指定行列执行条件除法并保留完整DataFrame
Pandas:仅对指定行列执行除法并保留完整DataFrame
我有一个包含500余列的Pandas DataFrame,需求是:对第0列值为'dog'的行,将其第2列至最后一列的数值除以100。
原始数据示例
0 1 2 3 cat 2019 19.80 96.28 cat 2022 19.50 66.80 dog 2022 21.10 57.70 dog 2021 21.50 42.85
期望输出
0 1 2 3 cat 2019 19.80 96.28 cat 2022 19.50 66.80 dog 2022 0.211 0.577 dog 2021 0.215 0.4285
现有问题代码
现有代码可完成指定行列的除法操作,但会删除第0、1列以及非'dog'的行:
df=df[df[0].str.contains("dog")].loc[:,2:len(r2.columns)-1].div(100)
解决方案
要保留完整DataFrame,只需针对符合条件的行和列进行原地修改,无需替换整个DataFrame:
方法1:直接使用布尔索引赋值
# 精准匹配第0列为'dog'的行,对第2列至末列执行除法 df.loc[df[0] == 'dog', 2:] = df.loc[df[0] == 'dog', 2:] / 100
如果第0列的值可能包含'dog'(比如'doggy'),可以用字符串包含匹配:
df.loc[df[0].str.contains('dog'), 2:] = df.loc[df[0].str.contains('dog'), 2:] / 100
方法2:使用div方法
和上面逻辑一致,只是用div替代除法运算符:
df.loc[df[0] == 'dog', 2:] = df.loc[df[0] == 'dog', 2:].div(100)
以上两种方式都会保留所有行和列,仅修改目标范围内的数据。
内容的提问来源于stack exchange,提问作者rupi
相关产品推荐
相关产品推荐

