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()
删除df1Value
列中的项目,如果它位于df2remove
列中
将熊猫作为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]