Blue Moon
Blue Moon

Reputation: 189

Python Pandas: Using ffill based on condition of other column where it's blank

I tried group by then ffill and nothing has worked. :(

How do I use ffill based on a blank column called "Rec". So if this column is blank, then fill the previous value on the "Rec" column and then replace "Loc1" and Loc with previous value as well?

Here is my df:

+--------+----------+----------------------------+---------+------------+
| Lot    | Rec      | Part                       | Loc1    | Loc        |
+--------+----------+----------------------------+---------+------------+
| Y19105 | BIPA6.02 | PHEMT6_BGATE_70NM_EBEAM.05 | B_EBEAM | B_F_EBEAM  |
+--------+----------+----------------------------+---------+------------+
| Y19105 |          | PHEMT6_BGATE_70NM_EBEAM.05 | B_PC    | B_PC_STOCK |
+--------+----------+----------------------------+---------+------------+
| Y19105 | BIPA6.02 | PHEMT6_BGATE_70NM_EBEAM.05 | B_EBEAM | B_F_EBEAM  |
+--------+----------+----------------------------+---------+------------+
| Y19105 | BIPA6.02 | PHEMT6_BGATE_70NM_EBEAM.05 | B_EBEAM | B_F_EBEAM  |
+--------+----------+----------------------------+---------+------------+
| Y19105 | BIPA6.02 | PHEMT6_BGATE_70NM_EBEAM.05 | B_EBEAM | B_F_EBEAM  |
+--------+----------+----------------------------+---------+------------+
| Y19105 | BIPA6.02 | PHEMT6_BGATE_70NM_EBEAM.05 | B_EBEAM | B_F_EBEAM  |
+--------+----------+----------------------------+---------+------------+
| Y19105 |          | PHEMT6_BGATE_70NM_EBEAM.05 | B_PC    | B_PC_STOCK |
+--------+----------+----------------------------+---------+------------+
| Y19105 |          | PHEMT6_BGATE_70NM_EBEAM.05 | B_PC    | B_PC_STOCK |
+--------+----------+----------------------------+---------+------------+
| Y19105 |          | PHEMT6_BGATE_70NM_EBEAM.05 | B_PC    | B_PC_STOCK |
+--------+----------+----------------------------+---------+------------+

The output I want:

+--------+----------+----------------------------+---------+-----------+
| Lot    | Rec      | Part                       | Loc1    | Loc       |
+--------+----------+----------------------------+---------+-----------+
| Y19105 | BIPA6.02 | PHEMT6_BGATE_70NM_EBEAM.05 | B_EBEAM | B_F_EBEAM |
+--------+----------+----------------------------+---------+-----------+
| Y19105 | BIPA6.02 | PHEMT6_BGATE_70NM_EBEAM.05 | B_EBEAM | B_F_EBEAM |
+--------+----------+----------------------------+---------+-----------+
| Y19105 | BIPA6.02 | PHEMT6_BGATE_70NM_EBEAM.05 | B_EBEAM | B_F_EBEAM |
+--------+----------+----------------------------+---------+-----------+
| Y19105 | BIPA6.02 | PHEMT6_BGATE_70NM_EBEAM.05 | B_EBEAM | B_F_EBEAM |
+--------+----------+----------------------------+---------+-----------+
| Y19105 | BIPA6.02 | PHEMT6_BGATE_70NM_EBEAM.05 | B_EBEAM | B_F_EBEAM |
+--------+----------+----------------------------+---------+-----------+
| Y19105 | BIPA6.02 | PHEMT6_BGATE_70NM_EBEAM.05 | B_EBEAM | B_F_EBEAM |
+--------+----------+----------------------------+---------+-----------+
| Y19105 | BIPA6.02 | PHEMT6_BGATE_70NM_EBEAM.05 | B_EBEAM | B_F_EBEAM |
+--------+----------+----------------------------+---------+-----------+
| Y19105 | BIPA6.02 | PHEMT6_BGATE_70NM_EBEAM.05 | B_EBEAM | B_F_EBEAM |
+--------+----------+----------------------------+---------+-----------+
| Y19105 | BIPA6.02 | PHEMT6_BGATE_70NM_EBEAM.05 | B_EBEAM | B_F_EBEAM |
+--------+----------+----------------------------+---------+-----------+

Your help is very much appreciated!

Upvotes: 1

Views: 431

Answers (1)

U13-Forward
U13-Forward

Reputation: 71570

IIUC you could try changing the Loc1 and Loc values to NaN if the Rec column is NaN, and then use ffill on the whole DataFrame.

Try this:

df.loc[df['Rec'].isnull(), ['Loc1', 'Loc']] = np.nan
df.ffill()

Upvotes: 1

Related Questions