python - 比较列中的字符串并在 python 中创建相应的新列

标签 python python-3.x pandas dataframe jupyter-notebook

我有如下所示的数据框。我需要将数据框中的列与字符串进行比较并创建一个新列。

数据框:

col_1
AB_SUMI
AK_SUMI
SB_LIMA
SB_SUMI
XY_SUMI

如果 col_1 中存在“AB”、“AK”、“SB”,则应使用它们各自的值创建一个新列,否则“*”应出现在列值中。

预期输出:

col_1      new_col
AB_SUMI     AB
AK_SUMI     AK
SB_LIMA     SB
SB_SUMI     SB
XY_SUMI     *

我尝试过以下代码,但没有成功。

list=['AB','AK','AB']

for item in list:
    if df['col1'].str.contains(item).any():
        df['new']=item

请在这方面帮助我。提前致谢

最佳答案

您可以使用extract通过 join | ()使用 list 创建的 regex,最后替换 NaN 作者:fillna :

L= ['AB','AK','SB']
a = '(' + '|'.join(L) + ')'
print (a)
(AB|AK|SB)

df['new'] = df.col_1.str.extract(a, expand=False).fillna('*')
print (df)
     col_1 new
0  AB_SUMI  AB
1  AK_SUMI  AK
2  SB_LIMA  SB
3  SB_SUMI  SB
4  XY_SUMI   *

关于python - 比较列中的字符串并在 python 中创建相应的新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42883267/

相关文章:

python - 如何用循环和递归实现求和

python - 如何从抓取的页面中删除字符串的大部分?

python - str.replace 问题

python - 附加到列表字典会增加每个键的值

python - 如何在 Django 模板中显示列表?

python - 这些字符串在 Python 解释器内部是如何表示的?我不明白

python - Selenium select第一个选择的选项没有 'value'属性,如何添加此属性?

python - 是否可以用 str.contain 定义句子中字符的索引?

python - Pandas DataFrame 在写入操作后包含 NaN

python - 检查某列的值是否位于 pandas 数据框中的另一个列数组中