根据多个列的条件更改数据框列中的某些值
Change certain values in a dataframe column based on conditions on several columns
让我们使用这个示例数据框:
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()" :
df['Category']=np.where((df['Category']=='B') and (df['Subcategory']=='C' or df['Subcategory']== 'D'),'B2',df['Category'])
我知道 Whosebug 上已经有人问过一些类似的问题,但我不知道我哪里错了。你能帮我理解我的错误吗?
预期输出:
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.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 = 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()" :
df['Category']=np.where((df['Category']=='B') and (df['Subcategory']=='C' or df['Subcategory']== 'D'),'B2',df['Category'])
我知道 Whosebug 上已经有人问过一些类似的问题,但我不知道我哪里错了。你能帮我理解我的错误吗?
预期输出:
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.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