如何使用if&else在熊猫中组合三个文本列



我正在使用python 3.7我有一个熊猫数据框架与三个文本列,姓名,电子邮件&;部分。示例数据看起来像

Name   Email              Section
abc    abc@gmail.com      purchase
cde      -                drawing
lmn-pqr      None               -

在所有三列中的两个单词之间都有连字符。我想用" "作为分隔符,并创建一个新的列组,忽略None或-。我的合并结果看起来像

Name   Email              Section   Group
abc    abc@gmail.com      purchase  abc_abc@gmail.com_purchase
cde      -                drawing   cde_drawing
lmn-pqr      None               -   lmn-pqr

我不确定python代码。你能帮帮我吗?

您可以使用去掉空值的str.cat:

df.mask(df.isin(['-', None])).apply(lambda r: r.str.cat(sep='_'), axis=1)

,或者手动:

df['Group'] = df.apply(lambda r: '_'.join([x for x in r.replace('-', pd.NA).dropna()]),
axis=1)

输出:

Name          Email   Section                       Group
0      abc  abc@gmail.com  purchase  abc_abc@gmail.com_purchase
1      cde              -   drawing                 cde_drawing
2  lmn-pqr           None         -                     lmn-pqr

您可以尝试将-替换为None,然后在连接时将其过滤掉

df['Group'] = df.replace({'-': None}).apply(lambda row: '_'.join(filter(None, row)), axis=1)
print(df)
Name          Email   Section                       Group
0      abc  abc@gmail.com  purchase  abc_abc@gmail.com_purchase
1      cde              -   drawing                 cde_drawing
2  lmn-pqr           None         -                     lmn-pqr
df['Group'] = df.apply(lambda x: '-'.join([x['Name'], x['Email'], x['Section']))

x是一个级数

相关内容

最新更新