我想获取所有行(至少)在df [mylist]中的一列包含True。
我目前正在做:
df = df[ df[mylist[0]] | df[mylist[1]] | df[mylist[2]] ]
其中mylist是与的列有关的字符串列表df。但我想在不限长度的情况下进行此操作mylist。
我能想到的唯一方法是循环mylist
并为其每个元素创建一个新的数据框,然后进行合并/合并或其他操作。但这对我来说并不聪明。
有没有更好的办法?
建立在LondonRob的答案上,您可以使用
df.loc[df[mylist].any(axis=1)]
与每行一次调用Python的内置函数any相比apply,调用DataFrame的方法将具有更好的性能any。
或者您可以使用np.logical_or.reduce
:
df.loc[np.logical_or.reduce(df[mylist], axis=1)]
对于大型DataFrame,使用起来np.logical_or
可能更快:
In [30]: df = pd.DataFrame(np.random.binomial(1, 0.1, size=(100,300)).astype(bool))
In [31]: %timeit df.loc[np.logical_or.reduce(df, axis=1)]
1000 loops, best of 3: 261 µs per loop
In [32]: %timeit df.loc[df.any(axis=1)]
1000 loops, best of 3: 636 µs per loop
In [33]: %timeit df[df.apply(any, axis=1)]
100 loops, best of 3: 2.13 ms per loop
请注意,它df.any具有其他功能,例如可以跳过NaN。在这种情况下,如果列是布尔值,则不能有任何NaN(因为NaN是浮点值)。这样np.logical_or.reduce
更快。
import numpy as np
import pandas as pd
np.random.seed(2014)
df = pd.DataFrame(np.random.binomial(1, 0.1, size=(10,3)).astype(bool),
columns=list('ABC'))
print(df)
# A B C
# 0 False False False
# 1 True False False
# 2 False False False
# 3 True False False
# 4 False False False
# 5 False False False
# 6 False True False
# 7 False False False
# 8 False False False
# 9 False False False
mylist = list('ABC')
print(df[ df[mylist[0]] | df[mylist[1]] | df[mylist[2]] ])
print(df.loc[df[mylist].any(axis=1)])
print(df.loc[np.logical_or.reduce(df[mylist], axis=1)])
产生其中至少一列为True的行:
A B C
1 True False False
3 True False False
6 False True False
给定一个数组,是否可以从起始索引开始选择一组整数,这样该组就与给定的目标相加?但是,附加的限制是必须选择所有的6。 groupSum6(0,[5,6,2],8)true groupSum6(0,[5,6,2],9)false groupSum6(0,[5,6,2],7)false 只是想弄清楚我错在哪里。声明nums[start]==6的特殊情况是不是错误的方法?
问题内容: 如何将条件逻辑应用于Pandas DataFrame。 请参见下面显示的DataFrame, 我的原始数据显示在“数据”列中,并且期望的输出显示在其旁边。如果“数据”中的数字小于2.5,则所需的输出为False。 我可以应用循环并重新构建DataFrame …但是那是“非Python的” 问题答案: 只需将列与该值进行比较:
我有一个几个列的数据表,比如column1,column2…column100。如何只选择列的子集(不是column1)应该返回所有列column2....column100。 我不想变异数据表。我只想选择所有没有特定列名的列,如我的示例中所示
我可以在cassandra查询中的Blob列字段内进行逻辑查询吗? 就像我在Blob字段中有一个名为purchase amount:500$的文件一样,我想搜索并获取结果purchase amount大于500$。 有没有办法在我的blob中进行这种逻辑搜索。
我们有一种表设计,其中许多表共享一些列,例如,在一种情况下,我们的一些表将列。在另一种情况下,我们的多个表具有列和。这些表在待连接数据方面不共享任何内容,因此,我不想为这些数据引入公共连接表(由于性能问题,这也不是一个选项)。 但是从应用的角度来看,我确实有非常相似的任务要执行。例如,如果我创建了一个新行,在哪个表中插入条目并不重要,我需要从请求中提取审批者和请求时间来将其填充到我的表中,以及稍后
问题内容: 我有两段熊猫代码,我认为它们应该是等效的,但是第二段代码并没有达到我的期望。 每个部分(例如)都按照自己的期望进行操作,但是似乎我在逻辑运算符上做错了,因为最终结果与列表理解版本的结果不同。 问题答案: 的操作者比结合更紧密地(或任何比较操作符)。请参阅文档。一个简单的例子是: 这是因为将其分组为,然后调用了比较链接。这就是您的情况。您需要在每个比较之间加上括号。 请注意和比较中的多余