我有一个如下所示的 Dataframe
sample_df = pd.DataFrame({'single_proj_name': [['jsfk'],['fhjk'],['ERRW'],['SJBAK']],
'single_item_list': [['ABC_123'],['DEF123'],['FAS324'],['HSJD123']],
'single_id':[[1234],[5678],[91011],[121314]],
'multi_proj_name':[['AAA','VVVV','SASD'],['QEWWQ','SFA','JKKK','fhjk'],['ERRW','TTTT'],['SJBAK','YYYY']],
'multi_item_list':[['XYZAV','ADS23','ABC_123'],['XYZAV','DEF123','ABC_123','SAJKF'],['QWER12','FAS324'],['JFAJKA','HSJD123']],
'multi_id':[[2167,2147,29481],[2313,57567,2321,7898],[1123,8775],[5237,43512]]})
我想做以下几点
a)从single_item_list
中为每行选取值
b)在同一行multi_item_list
列中查找该值
c)如果发现匹配,则仅保留multi_item_list
中的该值,并从multi_item_list
中删除所有其他不匹配的值
d)根据匹配项的位置,在multi_id
列表中查找对应的值,只保留该项,从列表中删除所有其他位置项
所以,我尝试了下面,但它不工作
def func(df):
return list(set(sample_df['single_item_list']) - set(sample_df['multi_item_list']))
sample_df['col3'] = sample_df.apply(func, axis = 1)
我希望我的输出如下所示
1条答案
按热度按时间6l7fqoea1#
你可以并行
explode
这两个列表(panda 1.3+),然后过滤:如果您想要回您的列表:
输出:
使用列表解析的备选项: