我有一个DataFrame df,它有列类型和子类型以及大约100k行,我试图通过检查类型/子类型组合来分类df包含的数据类型.虽然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()
如果A类型是长期的Falses系列,那么它可能会有一些真则. 0然后我知道它包含一个True.这个方案的问题是,如果df的第一行产生一个True,它仍然需要检查其他所有内容.检查整个DataFrame比使用带有break的for循环更快,但我想知道是否有更好的方法来执行它.
谢谢你的任何建议.
解决方法:
使用交叉表:
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()
结果如下:
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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。