我正在使用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是一个级数