I have a dataset where I would like to replace and update values within a column when a data condition is met.
Data
JavaScript
x
18
18
1
ID Date State File
2
AA Q122 NY closed
3
AA Q222 NY closed
4
AA Q322 NY closed
5
AA Q422 NY closed
6
AA Q123 NY closed
7
AA Q223 NY closed
8
AA Q323 NY closed
9
AA Q423 NY closed
10
BB Q124 CA closed
11
BB Q224 CA open
12
BB Q324 CA open
13
BB Q424 CA open
14
BB Q125 CA open
15
BB Q225 CA open
16
BB Q325 CA open
17
BB Q425 CA open
18
Desired
JavaScript
1
18
18
1
ID Date State File
2
AA Q122 NY yes
3
AA Q222 NY yes
4
AA Q322 NY yes
5
AA Q422 NY yes
6
AA Q123 NY yes
7
AA Q223 NY closed
8
AA Q323 NY closed
9
AA Q423 NY closed
10
BB Q124 CA closed
11
BB Q224 CA open
12
BB Q324 CA open
13
BB Q424 CA open
14
BB Q125 CA open
15
BB Q225 CA open
16
BB Q325 CA open
17
BB Q425 CA open
18
Doing
JavaScript
1
5
1
df.loc[(df['ID'].eq('AA')) & (df['Date'] <= 'Q123'), 'File'] = 'yes'
2
3
4
**However this is not capturing the quarter order and assigns the string 'yes' to rows that do not meet the condition of less than or = to Q123.**
5
Still researching, any suggestion is appreciated- Perhaps I need to convert quarters to datetime longdate and base the condition off of this column.
Advertisement
Answer
here is one way to do it
to apply the condition, Date need to be in Year and Quarter, and then applying np.where condition. However, you need to put the condition in the same format i.e. YYQ (year, quarter)
JavaScript
1
6
1
df['File']= np.where( ( df['ID'] =='AA') &
2
((df['Date'].str[-2:] + df['Date'].str[1:2]).astype(int) <=231)
3
, 'yes'
4
, df['File'] )
5
df
6
JavaScript
1
18
18
1
ID Date State File
2
0 AA Q122 NY yes
3
1 AA Q222 NY yes
4
2 AA Q322 NY yes
5
3 AA Q422 NY yes
6
4 AA Q123 NY yes
7
5 AA Q223 NY closed
8
6 AA Q323 NY closed
9
7 AA Q423 NY closed
10
8 BB Q124 CA closed
11
9 BB Q224 CA open
12
10 BB Q324 CA open
13
11 BB Q424 CA open
14
12 BB Q125 CA open
15
13 BB Q225 CA open
16
14 BB Q325 CA open
17
15 BB Q425 CA open
18