I have this dataframe where I am trying to combine Email_x
and Email_y
to be a column email
.
- If both are
NaN
then the result should be""
ornp.nan
. Email_y
has a value andEmail_x
does not then useEmail_y
as the result(vice versa).- If both have values then take the first one only.
Email_x Email_y Verification status_x Verification status_y
489 sample3@gmail.com NaN valid valid
975 samle4@gmail.com NaN accept_all NaN
1192 NaN NaN NaN NaN
1370 sample5@gmail.com NaN unknown NaN
2001 NaN NaN NaN NaN
2565 sample2@gmail.com sample2@gmail.com valid NaN
3900 NaN NaN NaN NaN
3998 NaN NaN NaN NaN
4192 NaN NaN NaN NaN
4757 NaN sample@gmail.com NaN NaN
I have tried using this but it fails when both have a value and results in both the values being combined.
df["email"] = df[["Email_x", "Email_y"]].fillna("").agg(" ".join, axis=1)
Result:
Email_x Email_y Verification status_x Verification status_y email
489 sample3@gmail.com NaN valid valid sample3@gmail.com
975 samle4@gmail.com NaN accept_all NaN samle4@gmail.com
1192 NaN NaN NaN NaN
1370 sample5@gmail.com NaN unknown NaN sample5@gmail.com
2001 NaN NaN NaN NaN
2565 sample2@gmail.com sample2@gmail.com valid NaN sample2@gmail.com sample2@gmail.com
3900 NaN NaN NaN NaN
3998 NaN NaN NaN NaN
4192 NaN NaN NaN NaN
4757 NaN sample@gmail.com NaN NaN sample@gmail.com
Expected result:
Email_x Email_y Verification status_x Verification status_y email
489 sample3@gmail.com NaN valid valid sample3@gmail.com
975 samle4@gmail.com NaN accept_all NaN samle4@gmail.com
1192 NaN NaN NaN NaN
1370 sample5@gmail.com NaN unknown NaN sample5@gmail.com
2001 NaN NaN NaN NaN
2565 sample2@gmail.com sample2@gmail.com valid NaN sample2@gmail.com
3900 NaN NaN NaN NaN
3998 NaN NaN NaN NaN
4192 NaN NaN NaN NaN
4757 NaN sample@gmail.com NaN NaN sample@gmail.com
Sample dictionary:
import numpy as np
a = {
"Email_x": {
489: "sample3@gmail.com",
975: "samle4@gmail.com",
1192: np.nan,
1370: "sample5@gmail.com",
2001: np.nan,
2565: "sample2@gmail.com",
3900: np.nan,
3998: np.nan,
4192: np.nan,
4757: np.nan,
},
"Email_y": {
489: np.nan,
975: np.nan,
1192: np.nan,
1370: np.nan,
2001: np.nan,
2565: "sample2@gmail.com",
3900: np.nan,
3998: np.nan,
4192: np.nan,
4757: "sample@gmail.com",
},
"Verification status_x": {
489: "valid",
975: "accept_all",
1192: np.nan,
1370: "unknown",
2001: np.nan,
2565: "valid",
3900: np.nan,
3998: np.nan,
4192: np.nan,
4757: np.nan,
},
"Verification status_y": {
489: "valid",
975: np.nan,
1192: np.nan,
1370: np.nan,
2001: np.nan,
2565: np.nan,
3900: np.nan,
3998: np.nan,
4192: np.nan,
4757: np.nan,
},
}