简体   繁体   中英

How to fill a column under certain conditions?

I have two data frames df (with 15000 rows) and df1 ( with 20000 rows)

Where df looks like

 Number   Color    Code     Quantity
  1        Red     12380     2
  2        Bleu    14440     3
  3        Red     15601     1

and df1 that has two columns Code and Quantity where I want to fill Quantity column under certain conditions using python in order to obtain like this

Code   Quantity
12380    2
15601    1
15640    1
14400    0

The conditions that I want to take in considerations are:

  • If the two last caracters of Code column of df1 are both equal to zero, in this case I want to have 0 in the Quantity column of df1
  • If I don't find the Code in df, in this cas I put 1 in the Quantity column of df1
  • Otherwise I take the quantity value of df

Let us try:

mask = df1['Code'].astype(str).str[-2:].eq('00')
mapped = df1['Code'].map(df.set_index('Code')['Quantity'])
df1['Quantity'] = mapped.mask(mask, 0).fillna(1)

Details:

Create a boolean mask specifying the condition where the last two characters of Code are both 0 :

>>> mask

0    False
1    False
2    False
3     True
Name: Code, dtype: bool

Using Series.map map the values in Code column in df1 to the Quantity column in df based on the matching Code :

>>> mapped

0    2.0
1    1.0
2    NaN
3    NaN
Name: Code, dtype: float64

mask the values in the above mapped column where the boolean mask is True , and lastly fill the NaN values with 1 :

>>> df1

    Code  Quantity
0  12380       2.0
1  15601       1.0
2  15640       1.0
3  14400       0.0

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM