基于其他类型的不同末端的字符串的末端,在新列中设置值



我正在尝试在熊猫中创建一个新列,其中包含第一列的某些字符串末端,但是,通过使用np.where/df。我只能设置两个值,一个如果符合条件,则另一个。

我尝试从原始df过滤不同的df(基于第一列中的值(,并在此处添加新列,然后使用pd.concat创建新的DF及其工作。

reference_list = ["AAA", "BBB", "CCC", ...]
df["newcolumn"] = np.where(df["column1"].str.endswith(reference_list), "value", "other")

btw如果我每次都喜欢上面的情况,它会在参考列表中找到一个值为新列中的"值"的值,但是我希望该值与参考列表中找到的值相同我想拥有这样的东西

df["newcolumn"] = np.where(df["column1"].str.endswith(reference_list), reference_list_value, "other")

这是我得到的DF

column1   new_column
AAABBB    value
AAACCC    value
BBBCCC    value
BBBAAA    value

这是我想要的DF

column1   new_column
AAABBB    BBB
AAACCC    CCC
BBBCCC    CCC
BBBAAA    AAA

帮助

您可以使用以下列表理解:

df["newcolumn"] = [s for i in df.column1 for s in reference_list if i.endswith(s)]

print(df)
   column1 newcolumn
0  AAABBB       BBB
1  AAACCC       CCC
2  BBBCCC       CCC
3  BBBAAA       AAA

使用str.extract并捕获组:

df:
  column1
0  AAABBB
1  AAACCC
2  BBBCCC
3  BBBAAA
4  FFFFFF

尝试以下内容:

s = '|'.join(['('+item+'$)' for item in reference_list])
df['new_column'] = df.column1.str.extract(s, expand=True).bfill(axis=1)[0].fillna('other')
df:
  column1 new_column
0  AAABBB        BBB
1  AAACCC        CCC
2  BBBCCC        CCC
3  BBBAAA        AAA
4  FFFFFF      other

尝试以下:

l = lambda x: re.search( "|".join(reference_list) + "$", x ).group(0)
df['column1'].apply(l ,1)