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

如果它们不等于 3 个不同的字符串,我想更改列的一部分(第 109 到 140 行)的值。


我试图不迭代,现在我似乎只能在一种情况下这样做。


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().


我试过这个:


df.loc[109:140,1] != ('Method', 'Replicates', 'StandardDeviation')


但它似乎使它成为一个“和”声明。


我经常遇到这个错误:ValueError:一个系列的真值是模棱两可的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。


我试过用 a|代替,它也不起作用。


繁星coding
浏览 107回答 3
3回答

芜湖不芜

# 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()mask = df[1].isin(('Method', 'Replicates', 'StandardDeviation'))并用于where更改掩码为的系列的子集False。df.loc[5:9, 1] = df.loc[5:9, 1].where(mask, 'new better value')结果:#                    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

红颜莎娜

请看一下Series.isin()函数。它完全符合您的要求df.loc[109:140,1].isin(['Method', 'Replicates', 'StandardDeviation'])

蝴蝶刀刀

试试这个: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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python