Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从与dataframe的另一列的字符串匹配的列中删除字符串?_Python_Pandas - Fatal编程技术网

Python 如何从与dataframe的另一列的字符串匹配的列中删除字符串?

Python 如何从与dataframe的另一列的字符串匹配的列中删除字符串?,python,pandas,Python,Pandas,我需要两个数据帧 第一个:df df1 = pd.DataFrame({ 'Sample': ['Sam1', 'Sam2', 'Sam3'], 'Value': ['ak,b,c,k', 'd,k,e,b,f,a', 'am, x,y,z,a'] }) df1 看起来是: Sample Value 0 Sam1 ak,b,c,k 1 Sam2 d,k,e,b,f,a 2 Sam3 am,x,y,z,a 第二个:df2 df2 = p

我需要两个数据帧 第一个:
df

df1 = pd.DataFrame({
    'Sample': ['Sam1', 'Sam2', 'Sam3'],
    'Value': ['ak,b,c,k', 'd,k,e,b,f,a', 'am, x,y,z,a']
})

df1
看起来是:

    Sample  Value
0   Sam1    ak,b,c,k
1   Sam2    d,k,e,b,f,a
2   Sam3    am,x,y,z,a
第二个:
df2

df2 = pd.DataFrame({
    'Remove': ['ak', 'b', 'k', 'a', 'am']})
df2
看起来是:

    Remove
0   ak
1   b
2   k
3   a
4   am
我想从
df1['Value']
中删除与
df2['remove']匹配的字符串。

预期产出为:

Sample    Value
Sam1      c
Sam2      d,e,f
Sam3      x,y,z
代码对我没有帮助

任何帮助,谢谢

您可以使用
apply()
删除df1
Value
列中的项目,如果它位于df2
remove
列中

将熊猫作为pd导入
df1=pd.DataFrame({
'样本':['Sam1','Sam2','Sam3'],
'值':['ak,b,c,k','d,k,e,b,f,a','am,x,y,z,a']
})
df2=pd.DataFrame({'Remove':['ak','b','k','a','am']})
remove_list=df2['remove'].values.tolist()
def删除值(行,删除列表):
keep_list=[val for val in row['Value']。如果val不在remove_list中,则拆分(',')]
返回“,”。加入(保留列表)
df1['Value']=df1.apply(删除_值,axis=1,args=(删除_列表,))
打印(df1)

使用
应用
作为1行

df1['Value'] = df1['Value'].str.split(',').apply(lambda x:','.join([i for i in x if i not in df2['Remove'].values]))
输出:

>>> df1
  Sample   Value
0   Sam1       c
1   Sam2   d,e,f
2   Sam3   x,y,z

这个脚本将帮助您

for index, elements in enumerate(df1['Value']):
    elements = elements.split(',')
    df1['Value'][index] = list(set(elements)-set(df2['Remove']))
只需迭代数据帧,并使用如下移除数组获得数组的差异
完整的代码是这样的

import pandas as pd

df1 = pd.DataFrame({
    'Sample': ['Sam1', 'Sam2', 'Sam3'],
    'Value': ['ak,b,c,k', 'd,k,e,b,f,a', 'am,x,y,z,a']
})

df2 = pd.DataFrame({
    'Remove': ['ak', 'b', 'k', 'a', 'am']})

for index, elements in enumerate(df1['Value']):
    elements = elements.split(',')
    df1['Value'][index] = list(set(elements)-set(df2['Remove']))

print(df1)
输出

  Sample      Value
0   Sam1        [c]
1   Sam2  [e, d, f]
2   Sam3  [y, x, z]

您的
m
是如何为
Sam3
删除的?因为在
df2
中没有单个
m
,但是有
am
。。它应该被移除吗?
  Sample      Value
0   Sam1        [c]
1   Sam2  [e, d, f]
2   Sam3  [y, x, z]