python – Pandas isin有多列

python – Pandas isin有多列,第1张

概述我想选择数据框中包含列表中定义的值的所有行. 我有两种方法都不能按预期/需要工作. 我的数据框看起来像这样: Timestamp DEVICE READING VALUE1 | DEV1 | READ1 | randomvalue2 | DEV1 | READ2 | randomvalue3 | DEV2 | READ1 | randomvalue4 | DEV2 | READ2 | ra 我想选择数据框中包含列表中定义的值的所有行.
我有两种方法都不能按预期/需要工作.

我的数据框看起来像这样:

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

解决这个问题最简单或最好的方法是什么?
你能帮助我吗?

〜费边

解决方法@H_403_47@ 您可以将列表转换为元组列表.将数据框中的所需列转换为元组并使用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 VALUE0   1   DEV1    READ1   randomvalue1   2   DEV1    READ2   randomvalue2   3   DEV2    READ1   randomvalue
总结

以上是内存溢出为你收集整理的python – Pandas isin有多列全部内容,希望文章能够帮你解决python – Pandas isin有多列所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1192149.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存