Python: Pandas数据帧的条件切片

4
我希望在pandas数据框的列的一个切片中,只有当条件被满足时,才能更改该列中包含“ABC”的内容。我尝试了下面的代码,但它返回了以下错误:
A value is trying to be set on a copy of a slice from a DataFrame.Try using .loc[row_indexer,col_indexer] = value instead
 print df

   Item  Price  Quantity
0  ABC    10     30
1  ABB    20     50 
2  ABC    37     89
3  ABG    5      78

con1 = df['Price']>10
con2 = df['Quantity']>20
df[df['Item']=='ABC'].loc[con1 & con2,'Item'] = 'ABCD'

Output that I want

   Item  Price  Quantity
0  ABC    10     30
1  ABB    20     50 
2  ABCD   37     89
3  ABG    5      78
2个回答

8
这个警告是由于使用了链式索引 (先创建一个切片,然后在该切片上使用 .loc) 引起的。 df['Item']=='ABC' 只是在 .loc 中可以使用的另一个条件。
df.loc[con1 & con2 & (df['Item']=='ABC'), 'Item'] = 'ABCD'

1

con1 = df ['Price']> 10 con2 = df ['Quantity']> 20 con3 = df ['Item'] == 'ABC' df ['Item'] [(con1) & (con2) & (con3)] = 'ABCD'

这段代码是用于数据筛选和替换的。首先,它定义了三个条件:价格大于10、数量大于20和物品名称为'ABC'。然后,使用这些条件对数据框中的项目进行筛选,并将符合条件的项目名称更改为'ABCD'。

这种方法会生成一个SettingWithCopyWarning警告。 - Allen Qin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接