Python 3.x 仅当值存在于其他列中时,才将Dataframe复制到列

Python 3.x 仅当值存在于其他列中时,才将Dataframe复制到列,python-3.x,pandas,Python 3.x,Pandas,我有一个这样的数据帧 SMS Email 1 - or " " or nan 2 3 - or " " or nan 100 - or " " or nan - or " " or nan 此处-或“”或nan表示该位置可以是破折号、nan或空白值。 现在我想要一个输出数据帧,如 SMS Email

我有一个这样的数据帧

   SMS                 Email 
   1               - or " " or nan
   2                     3
 - or " " or nan        100
- or " " or nan        - or " " or nan 
此处-或“”或nan表示该位置可以是破折号、nan或空白值。 现在我想要一个输出数据帧,如

SMS                   Email                Status
1                    - or " " or nan        1
2                      3                    2
- or " " or nan        100                  100
- or " " or nan     - or " " or nan       - or " " or nan 
输出DF的逻辑类似于如果SMS或电子邮件都有值,则状态列应具有SMS的值,状态列不应具有nan、空白或破折号值,除非SMS和电子邮件都是nan或空白或-

IIUC

df['Status']=df[['SMS','Email']].apply(pd.to_numeric,errors='coerce', axis=1).bfill(1).iloc[:,0]
IIUC

您可以使用:

df['Status']=df[['SMS','Email']].replace('[^0-9]+',np.nan,regex=True).bfill(1).iloc[:,0]
print(df['Status'])

您可以使用:

df['Status']=df[['SMS','Email']].replace('[^0-9]+',np.nan,regex=True).bfill(1).iloc[:,0]
print(df['Status'])


谢谢,您能告诉我您的代码段中的哪个部分将SMS定义为默认值吗?谢谢,您能告诉我您的代码段中的哪个部分将SMS定义为默认值吗?