I would like to get from this:
nname | eemail | email2 | email3 | email4 |
---|---|---|---|---|
Stan | stan@example.com | NO | stan1@example.com | NO |
Danny | danny@example.com | danny1@example.com | danny2@example.com | danny3@example.com |
Elle | elle@example.com | NO | NO | NO |
To this:
nname | eemail |
---|---|
Stan | stan@example.com |
Stan | stan1@example.com |
Danny | danny@example.com |
Danny | danny1@example.com |
Danny | danny2@example.com |
Danny | danny3@example.com |
Elle | elle@example.com |
I know I can create 4 separate DFs with name and email column, then merge all 4 and drop the ones with 'NO' but I feel there might be smarter and more dynamic solution for this.
result = (
df.set_index("nname")
.stack()
.to_frame("eemail")
.query("eemail != 'NO'")
.droplevel(1)
.reset_index()
)