![](/img/trans.png)
[英]Python Generate dummy in dataframe based on another variable(pandas)
[英]Is there a dummy comparison variable in python and pandas
我有一个数据框df
如下:
C1 C2 C3
a1 a d
b1 b e
c1 c f
如果我做df[df['C1'] == 'a1']
我得到
C1 C2 C3
a1 a d
是否有某种比较事物的方法,以便如果我执行df[df['C1'] == 'what should I use here']
,我会得到所有行。 即我正在寻找一个虚拟比较变量,以便忽略比较语句并返回所有行。
C1 C2 C3
a1 a d
b1 b e
c1 c f
编辑:由于代码是祖父级的,我只需要使用==
比较语句。 我不能使用!=
。 比较变量通过 for 循环,如果可用,我可以在 for 循环中插入一个虚拟变量。
这是我无法修改的原始代码:
dfNew = []
for ii in ['a1', 'a2']:
for jj in ['a', 'b']:
dfNew.append(df[(df['C1'] == ii) & (df['C2'] == jj)])
我试图在dfNew
实现的是还dfNew
,如果['a1', 'a2', 'dummy']
存在虚拟变量,则仅完成其他比较操作。 列数接近 50,因此不可能在条件操作中对每一对进行编码以忽略。
Edit2:你如何在['a1', 'a2', 'dummy']
传递假人?
Dummy
变量。 如果你想要一个真正的Dummy
变量,官方和最干净的方法是创建一个类,其中__eq__
(平等检查)总是返回True
:
class Dummy:
def __eq__(self, other):
return True
现在:
>>> df[df['C1'] == Dummy()]
C1 C2 C3
0 a1 a d
1 b1 b e
2 c1 c f
>>>
总是给出True
。
Dummy
类对所有相等性检查都返回True
。
对于编辑。
做就是了:
['a1', 'a2', Dummy()]
unittest.mock.any
已经为我们做了这件事。 unittest
模块(内置模块)已经为我们完成了这个类。 我们也可以使用它:
from unittest.mock import ANY
现在:
>>> df[df['C1'] == ANY]
C1 C2 C3
0 a1 a d
1 b1 b e
2 c1 c f
>>>
也会工作!
unittest.mock.ANY
的源代码和我做的完全一样:
获取ANY
的源代码:
import inspect
print(inspect.getsource(ANY.__class__))
输出:
class _ANY(object):
"A helper object that compares equal to everything."
def __eq__(self, other):
return True
def __ne__(self, other):
return False
def __repr__(self):
return '<ANY>'
这和我所做的一样:)。
为什么不是这个?
df[df['C1'] == df['C1']]
这将适用于 NaN以外的所有值,因为 NaN != NaN。
事实上,由于 NaN 的特性(也许更准确地说,定义),您可以这样做(尽管 OP 明确要求仅使用==
):
df[df['C1'] == np.nan]
(我对此进行了测试,并且正如预期的那样,返回了所有行,包括 NaN 行。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.