如果元素存在于数据框的另一列中,则删除列表元素
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
...................
..................
如果list
(df1 ,df2,df3....df10
)中每个数据帧的col4
的第一个值(字符串)与DATA_SEL
中col2
的任何值都不匹配,我想删除那个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 的数组列中