首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据多个条件更改列中某一部分的值?

如何根据多个条件更改列中某一部分的值?
EN

Stack Overflow用户
提问于 2019-09-06 04:09:54
回答 3查看 54关注 0票数 0

如果列(第109行到第140行)的值不等于3个不同的字符串,我想要更改这些值。

我试着不迭代,现在我似乎只能在一个条件下这样做。

代码语言:javascript
运行
复制
df.loc[109:140,1] != 'Method' or df.loc[109:140,1] != 'Replicates' or df.loc[109:140,1] != 'StandardDeviation'

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我试过了:

代码语言:javascript
运行
复制
df.loc[109:140,1] != ('Method', 'Replicates', 'StandardDeviation')

但它似乎使它成为一个"and“语句。

我经常收到这样的错误: ValueError:级数的真值是不明确的。使用a.empty、a.bool()、a.item()、a.any()或a.all()。

我试着用|代替,它也不能工作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-09-06 04:32:32

代码语言:javascript
运行
复制
# mcve:

# np.random.seed(42)
# df = pd.DataFrame({1: np.random.choice(('asdf', 'Method', 'Replicates', 'StandardDeviation'), 10)})

#                    1
# 0         Replicates
# 1  StandardDeviation
# 2               asdf
# 3         Replicates
# 4         Replicates
# 5  StandardDeviation
# 6               asdf
# 7               asdf
# 8         Replicates
# 9             Method

使用pd.Series.isin()创建蒙版

代码语言:javascript
运行
复制
mask = df[1].isin(('Method', 'Replicates', 'StandardDeviation'))

并使用where更改掩码为False的系列的子集。

代码语言:javascript
运行
复制
df.loc[5:9, 1] = df.loc[5:9, 1].where(mask, 'new better value')

结果:

代码语言:javascript
运行
复制
#                    1
# 0         Replicates
# 1  StandardDeviation
# 2               asdf
# 3         Replicates
# 4         Replicates
# 5  StandardDeviation
# 6   new better value
# 7   new better value
# 8         Replicates
# 9             Method
票数 2
EN

Stack Overflow用户

发布于 2019-09-06 04:26:58

试试这个:

代码语言:javascript
运行
复制
df.loc[109:140]["NAME_OF_COLUMN_1"] = df.apply(lambda row: value1
                                            if row['NAME_OF_COLUMN_1'] not in ['Method', 'Replicates', 'StandardDeviation']
                                            else row['NAME_OF_COLUMN_1'], axis=1)
票数 0
EN

Stack Overflow用户

发布于 2019-09-06 04:30:57

请看一下Series.isin()函数。它做的正是你想要的

代码语言:javascript
运行
复制
df.loc[109:140,1].isin(['Method', 'Replicates', 'StandardDeviation'])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57812387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档