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

2024-10-01 11:28:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要两个数据帧 第一个: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

This代码对我没有帮助

需要帮忙吗,谢谢


Tags: 数据sample字符串dataframedfvalueamremove
3条回答

这个脚本将帮助您

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]

如果df1Value列中的项位于df2Remove列中,则可以使用apply()删除该列中的项

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']})

remove_list = df2['Remove'].values.tolist()

def remove_value(row, remove_list):
    keep_list = [val for val in row['Value'].split(',') if val not in remove_list]

    return ','.join(keep_list)

df1['Value'] = df1.apply(remove_value, axis=1, args=(remove_list,))

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

使用apply作为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

相关问题 更多 >