根据参考列表集分配 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
您可以创建一个包含监视列表值作为键和引用作为值的字典,然后使用 replace
和 regex=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
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
您可以创建一个包含监视列表值作为键和引用作为值的字典,然后使用 replace
和 regex=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