我正在尝试在熊猫中创建一个新列,其中包含第一列的某些字符串末端,但是,通过使用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)