【问题标题】:Add a new column with matching values in a list in pandas在 pandas 的列表中添加一个具有匹配值的新列
【发布时间】:2022-01-26 08:20:56
【问题描述】:

我有一个数据框,例如:

the_list =['LjHH','Lhy_kd','Ljk']

COL1 COL2 
A    ADJJDUD878_Lhy_kd
B    Y0_0099JJ_Ljk
C    YTUUDBBDHHD
D    POL0990E_LjHH'

我想添加一个新的COL3 列,如果在COL2 中我与the_list 中的值匹配,我在该列中添加the_list 的匹配元素。

预期结果;

COL1 COL2               COL3
A    ADJJDUD878_Lhy_kd  Lhy_kd
B    Y0_0099JJ_2_Ljk    Ljk    
C    YTUUDBBDHHD        NA
D    POL0990E_LjHH'     LjHH

【问题讨论】:

标签: python python-3.x pandas


【解决方案1】:

对于仅获取第一个匹配值,请使用 Series.str.extract| 的列表连接值,用于正则表达式 or

the_list =['LjHH','Lhy_kd','Ljk']

df['COL3'] = df['COL2'].str.extract(f'({"|".join(the_list)})', expand=False)
print (df)
  COL1               COL2    COL3
0    A  ADJJDUD878_Lhy_kd  Lhy_kd
1    B      Y0_0099JJ_Ljk     Ljk
2    C        YTUUDBBDHHD     NaN
3    D     POL0990E_LjHH'    LjHH

为了获取所有匹配的值(如果可能,多个值)使用 Series.str.findallSeries.str.join 并将最后一个空字符串替换为 NaNs:

the_list =['LjHH','Lhy_kd','Ljk']

df['COL3']=df['COL2'].str.findall(f'{"|".join(the_list)}').str.join(',').replace('',np.nan)
print (df)
  COL1               COL2    COL3
0    A  ADJJDUD878_Lhy_kd  Lhy_kd
1    B      Y0_0099JJ_Ljk     Ljk
2    C        YTUUDBBDHHD     NaN
3    D     POL0990E_LjHH'    LjHH

【讨论】:

    猜你喜欢
    • 2022-01-27
    • 1970-01-01
    • 2021-12-11
    • 2016-07-06
    • 2019-10-27
    • 2021-01-15
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    相关资源
    最近更新 更多