我有2个包含列表的数据框,我想保留第二个数据帧中包含的第一个数据帧的元素。是否有可能或者我必须尝试其他一些数据结构?
输入示例:
DF1:
elem1
a,c,v,b,n
b
c,x,a
DF2:
elem2
j,k,a,i,v
o,b
g,f,w
预期产出:
elem
a,v
b
NaN
答案 0 :(得分:1)
首先,您可以创建要匹配的字母的正则表达式
In [77]:
chars = df2.elem2.str.replace(',' , '|')
chars
Out[77]:
0 j|k|a|i|v
1 o|b
2 g|f|w
Name: elem2, dtype: object
将两者连接成一个数据框,以便稍后执行自定义函数
In [24]:
to_compare = pd.concat([df1 , chars] , axis = 1)
to_compare
Out[24]:
elem1 elem2
0 a,c,v,b,n j|k|a|i|v
1 b o|b
2 c,x,a g|f|w
最后使用您的正则表达式来匹配elem1
In [76]:
to_compare.apply( lambda x : ','.join(re.findall(x['elem2'] , x['elem1'])) , axis = 1)
Out[76]:
0 a,v
1 b
2
dtype: object
如果你想将空字符串从最终结果转换为NAN
,我会让你自己弄明白:-)
答案 1 :(得分:1)
第一列按功能portably forces output flushing on all implementations of awk
转换为列表。
如果两个数据框中的{{1}}相同,您可以轻松地将列从{{1}}添加到另一个{。\ n}。
您可以从列表中转换str.split apply之差,然后转换为列表。您必须使用{{1}},因为将函数应用于每一行。
{{1}}