user7983871
user7983871

Reputation:

Python: pandas dataframe condition for slice of a dataframe

I want to change the content in a slice of the pandas dataframe column that has 'ABC' ONLY in the column if the condition is fulfill. I try the code as below but it return this error

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

Upvotes: 4

Views: 8486

Answers (2)

dlwlrma
dlwlrma

Reputation: 828

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

Upvotes: 1

user2285236
user2285236

Reputation:

The warning is caused by the chained indexing (first making a slice and then using .loc on that slice). df['Item']=='ABC' is just another condition that you can use in .loc:

df.loc[con1 & con2 & (df['Item']=='ABC'), 'Item'] = 'ABCD'

Upvotes: 8

Related Questions