根据参考列表集分配 pandas 列

Assigning pandas columns based on set of reference list

objective是将main_frame列的值赋值给一个引用列表。

目前操作实现如下:

import pandas as pd

watchlist_ref = [['A1','AA2','A3'],
                ['B1','BC2','B3']]
upper_ref = ['A','B']
df = pd.DataFrame ({'tw':['A1','AA2','A3','B1','BC2','B3']})

for ls_str, ws in zip(watchlist_ref, upper_ref):
    df.loc[(df['tw'].str.contains('|'.join(ls_str), case=False)), 'main_frame'] = ws

给出以下输出:

    tw main_frame
0   A1          A
1  AA2          A
2   A3          A
3   B1          B
4  BC2          B
5   B3          B

但是,有没有办法避免使用for-loop

尝试 explode 然后 map

s = pd.Series(watchlist_ref,index=upper_ref).explode()
df['new'] = df.tw.map(dict(zip(s,s.index)))
df
Out[175]: 
    tw new
0   A1   A
1  AA2   A
2   A3   A
3   B1   B
4  BC2   B
5   B3   B

您可以创建一个包含监视列表值作为键和引用作为值的字典,然后使用 replaceregex=True 创建新列:

d = {'|'.join(ls_str): ws for ls_str, ws in zip(watchlist_ref, upper_ref)}
df['main_frame'] = df['tw'].replace(d, regex=True)

结果:

     tw  main_frame
0    A1           A
1   AA2           A
2    A3           A
3    B1           B
4   BC2           B
5    B3           B