python – Pandas isin有多列
发布时间:2020-12-20 11:08:01 所属栏目:Python 来源:网络整理
导读:我想选择数据框中包含列表中定义的值的所有行. 我有两种方法都不能按预期/需要工作. 我的数据框看起来像这样: Timestamp DEVICE READING VALUE1 | DEV1 | READ1 | randomvalue2 | DEV1 | READ2 | randomvalue3 | DEV2 | READ1 | randomvalue4 | DEV2 | READ
我想选择数据框中包含列表中定义的值的所有行.
我有两种方法都不能按预期/需要工作. 我的数据框看起来像这样: Timestamp DEVICE READING VALUE 1 | DEV1 | READ1 | randomvalue 2 | DEV1 | READ2 | randomvalue 3 | DEV2 | READ1 | randomvalue 4 | DEV2 | READ2 | randomvalue 5 | DEV3 | READ1 | randomvalue 我有以下列表(ls): [[DEV1,READ1],[DEV1,READ2],[DEV2,READ1]] 在这种情况下,我想删除第4行和第5行: 我的第一个方法是: df = df[(df['DEVICE']. isin([ls[i][0] for i in range(len(ls))])) & (df['READING'].isin([ls[k][1] for k in range(len(ls))]))] 这个问题很明显,它不会删除第4行,因为DEV2有READING READ2,但它应该删除它. 我的第二种方法是: df = df[(df[['DEVICE','READING']].isin({'DEVICE': [ls[i][0] for i in range(len(ls))],'READING': [ls[i][1] for i in range(len(ls))] }))] 这个选择正确的行但不删除其他行.相反,它将每个其他单元格设置为NaN,包括我想要保留的VALUE ROW.并且它不会累积,因此第4行看起来像4 | DEV2 | NaN | NaN 解决这个问题最简单或最好的方法是什么? ?费边 解决方法
您可以将列表转换为元组列表.将数据框中的所需列转换为元组并使用isin
l = [['DEV1','READ1'],['DEV1','READ2'],['DEV2','READ1']] l = [tuple(i) for i in l] df[df[['DEVICE','READING']].apply(tuple,axis = 1).isin(l)] 你得到 Timestamp DEVICE READING VALUE 0 1 DEV1 READ1 randomvalue 1 2 DEV1 READ2 randomvalue 2 3 DEV2 READ1 randomvalue (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |