Python 根据多个列的条件更改dataframe列中的某些值

Python 根据多个列的条件更改dataframe列中的某些值,python,pandas,dataframe,numpy,where-clause,Python,Pandas,Dataframe,Numpy,Where Clause,让我们以这个数据帧为例: df = pd.DataFrame({'Category':['A','B','B','B','A'], 'Subcategory':['C','C','E','D','D']}) Category Subcategory 0 A C 1 B C 2 B E 3 B D 4 A D 我想用“B2

让我们以这个数据帧为例:

df = pd.DataFrame({'Category':['A','B','B','B','A'], 'Subcategory':['C','C','E','D','D']})

  Category Subcategory
0        A           C
1        B           C
2        B           E
3        B           D
4        A           D
我想用“B2”替换类别中的“B”值,其中子类别中有C或D。我尝试了以下操作,但得到错误“序列的真值不明确。请使用a.empty、a.bool()、a.item()、a.any()或a.all()”:

我知道在Stackoverflow上已经有人问过类似的问题,但我不知道我错在哪里。你能帮我理解我的错误吗

预期产出:

  Category Subcategory
0        A           C
1       B2           C
2        B           E
3       B2           D
4        A           D

对每个条件使用位运算符和方括号。请参阅说明

df['Category']=np.where((df['Category']=='B')
                        & ((df['Subcategory']=='C')
                           | (df['Subcategory']== 'D')),'B2',df['Category'])
df

Category    Subcategory
0   A   C
1   B2  C
2   B   E
3   B2  D
4   A   D

最好使用
isin
检查多个值,
df[“Subcategory”]。isin(['C','D'])
在每个条件下使用位运算符和括号。请参阅说明

df['Category']=np.where((df['Category']=='B')
                        & ((df['Subcategory']=='C')
                           | (df['Subcategory']== 'D')),'B2',df['Category'])
df

Category    Subcategory
0   A   C
1   B2  C
2   B   E
3   B2  D
4   A   D

最好使用
isin
检查多个值,
df[“Subcategory”].isin(['C','D'])
使用
df.loc
。您还可以对多个值使用
df[column].isin

df.loc[(df["Subcategory"].isin(['C','D'])) & (df["Category"]=='B'),'Category']="B2"
输出

df
  Category Subcategory
0        A           C
1        B           C
2        B           E
3        B           D
4        A           D
df.loc[(df["Subcategory"].isin(['C', 'D'])) & (df["Category"] == 'B'), 'Category'] = "B2"
df
  Category Subcategory
0        A           C
1       B2           C
2        B           E
3       B2           D
4        A           D

使用
df.loc
。您还可以对多个值使用
df[column].isin

df.loc[(df["Subcategory"].isin(['C','D'])) & (df["Category"]=='B'),'Category']="B2"
输出

df
  Category Subcategory
0        A           C
1        B           C
2        B           E
3        B           D
4        A           D
df.loc[(df["Subcategory"].isin(['C', 'D'])) & (df["Category"] == 'B'), 'Category'] = "B2"
df
  Category Subcategory
0        A           C
1       B2           C
2        B           E
3       B2           D
4        A           D