我有一个DataFrame df有列type和subtype大约100k行,我试图df通过检查type/ subtype组合分类包含什么类型的数据.虽然df可以包含许多不同的组合,但是存在仅出现在某些数据类型中的特定组合.要检查我的对象是否包含我正在做的任何这些组合:
typeA = ((df.type == 0) & ((df.subtype == 2) | (df.subtype == 3) |
(df.subtype == 5) | (df.subtype == 6))) |
((df.type == 5) & ((df.subtype == 3) | (df.subtype == 4) | (df.subtype == 7) |
(df.subtype == 8)))
A = typeA.sum()
Run Code Online (Sandbox Code Playgroud)
其中typeA是一长串Falses可能有一些Trues,如果A> 0那么我知道它包含一个True.这个方案的问题是,如果df的第一行产生一个True,它仍然需要检查其他所有内容.检查整个DataFrame比使用带有break的for循环更快,但我想知道是否有更好的方法来执行它.
谢谢你的任何建议.
用途crosstab:
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randint(0, 10, size=(100, 2)), columns=["type", "subtype"])
counts = pd.crosstab(df.type, df.subtype)
print counts.loc[0, [2, 3, 5, 6]].sum() + counts.loc[5, [3, 4, 7, 8]].sum()
Run Code Online (Sandbox Code Playgroud)
结果如下:
a = (((df.type == 0) & ((df.subtype == 2) | (df.subtype == 3) |
(df.subtype == 5) | (df.subtype == 6))) |
((df.type == 5) & ((df.subtype == 3) | (df.subtype == 4) | (df.subtype == 7) |
(df.subtype == 8))))
a.sum()
Run Code Online (Sandbox Code Playgroud)