如何从熊猫数据框中删除某些不在列表中的值?

时间:2020-04-04 00:27:12

标签: python pandas numpy

通过编写以下代码,我创建了一个数据框

data = [['A', 'B','D'], ['A','D'], ['F', 'G','C','B','A']] 
df = pd.DataFrame(data) 
df

enter image description here

我的目标是从数据框中删除不在下面列表中的值。

list_items = ['A','B','C']

我的预期输出如下

enter image description here

我尝试遍历循环中的值并逐一检查,但假设数据帧很大(9108、1616),并且列表中有130多个项目需要检查。在这种情况下,运行代码将花费很长时间。请提出实现预期产量的最有效方法。

2 个答案:

答案 0 :(得分:3)

我认为在Handle中这样做不是一个好主意,因为此处的列无关紧要。使用列表更容易做到这一点,如果确实需要,可以将其最终转换为熊猫数据框。

TThread

答案 1 :(得分:1)

让我们尝试不使用for循环

s=df.where(df.isin(list_items)).reset_index().melt('index').dropna()
s=s.assign(Key=s.groupby('index').cumcount()).pivot('index','Key','value')
Key    0    1    2
index             
0      A    B  NaN
1      A  NaN  NaN
2      C    B    A

方法二不适用于大型数据框

s=df.where(df.isin(list_items)).T.apply(lambda x : sorted(x,key=pd.isnull)).T.dropna(thresh=1, axis=1)
   0    1    2
0  A    B  NaN
1  A  NaN  NaN
2  C    B    A