为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas 有多个列

Pandas 有多个列

HUH函数 2021-08-11 21:57:16
我想选择数据框中包含列表中定义的值的所有行。我有两种方法都不能按预期/想要的那样工作。我的数据框看起来像这样:Timestamp DEVICE READING VALUE1 | DEV1 | READ1 | randomvalue2 | DEV1 | READ2 | randomvalue3 | DEV2 | READ1 | randomvalue4 | DEV2 | READ2 | randomvalue5 | 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解决这个问题的最简单或最好的方法是什么?你能帮助我吗?
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

这应该做你想做的


import pandas as pd


df = pd.DataFrame({'a':[1,1,0,0,1], 'b':[0,0,1,0,1]})


keepers = [[0,0],[1,1]]


df = df[df.apply(lambda row: [row['a'], row['b']] in keepers, axis=1)]


查看完整回答
反对 回复 2021-08-11
  • 3 回答
  • 0 关注
  • 203 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号