如果元素存在于数据框的另一列中,则删除列表元素

Posted

技术标签:

【中文标题】如果元素存在于数据框的另一列中,则删除列表元素【英文标题】:deleting list element if the element is present on another column of a dataframe 【发布时间】:2022-01-04 07:04:26 【问题描述】:

我有一个数据框列表list=[df1,df2,df3,df4,...df10],数据框的构造如下:

>df1
     col1  col2  col3  col4
      Y     2     XX     PP

我有另一个数据框DATA_SEL 这样

>DATA_SEL
col1  col2  col3  col4
A      KK   C      D
A1     PP   C      D
...................
..................

如果listdf1 ,df2,df3....df10)中每个数据帧的col4的第一个值(字符串)与DATA_SELcol2 的任何值都不匹配,我想删除那个df来自list。 我怎么可能这样做?

另外,如果我想构建一个新列表,list2 其中col4 中每个数据帧的第一个值(字符串)list (df1 ,df2,df3....df10) 与 col2 in @ 中的任何值匹配987654337@,怎么办?

【问题讨论】:

【参考方案1】:

使用列表推导过滤:

L = [df1,df2,df3,df4,...df10]

#tested first value of col4
out = [x for x in L if DATA_SEL['col2'].eq(x.at[x.index[0], 'col4']).any()]
#if first row has index == 0
out = [x for x in L if DATA_SEL['col2'].eq(x.at[0, 'col4']).any()]

#tested any value of col4
out = [x for x in L if DATA_SEL['col2'].isin(x['col4']).any()]

【讨论】:

非常感谢。这就像魔术一样。我使用的 for 循环变得越来越复杂。 @Jewel_R - 抱歉,我更改了测试第一个值的解决方案,第一个解决方案测试 col4 的任何值

以上是关于如果元素存在于数据框的另一列中,则删除列表元素的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 Row_id 列将值写入数据框的另一列并且匹配列中存在值?

检查给定列表中的元素是不是存在于 DataFrame 的数组列中

如果来自一列的数据存在于另一列中,则合并两个数据框

如何根据 PySpark 数据框的另一列中的值修改列? F.当边缘情况

根据另一列中的元素重命名特定列元素

如何在 python 的另一列中的字符串值中从数据框中的一列中搜索字符串?