通过编写以下代码,我创建了一个数据框
data = [['A', 'B','D'], ['A','D'], ['F', 'G','C','B','A']]
df = pd.DataFrame(data)
df
我的目标是从数据框中删除不在下面列表中的值。
list_items = ['A','B','C']
我的预期输出如下
我尝试遍历循环中的值并逐一检查,但假设数据帧很大(9108、1616),并且列表中有130多个项目需要检查。在这种情况下,运行代码将花费很长时间。请提出实现预期产量的最有效方法。
答案 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