首页 > 解决方案 > Pandas:Dataframe itertuples 布尔系列 groupby 优化

问题描述

我是python新手。我有数据框(DF)示例:

ID 类型
1 一种
1
2 C
2

我想按 id 添加列示例 A_flag 组。最后我有数据框(DF):

ID 类型 一只旗
1 一种 1
1 1
2 C 0
2 0

我可以分两步做到这一点:

它正在工作,但对于大数据框来说非常慢。有什么办法可以优化这种情况吗?感谢帮助。

标签: pythonpandas

解决方案


通过替换您的第一步以通过 Pandas 内置函数生成布尔系列,将使用慢速迭代编码的代码更改为快速矢量化编码,例如

df['type'].eq('A')

然后,您可以将其附加到第二步的 groupby 语句中,如下所示:

df['A_flag'] = df['type'].eq('A').groupby(df['id']).transform('max').astype(int)

结果

print(df)


   id type  A_flag
0   1    A       1
1   1    B       1
2   2    C       0
3   2    B       0

一般来说,如果你有更复杂的条件,你也可以用矢量化的方式定义它,例如。通过以下方式定义布尔系列m

m = df['type'].eq('A') & df['type1'].gt(1)  | (df['type2'] != 0)

然后,在步骤 2 中使用它,如下所示:

m.groupby(df['id']).transform('max').astype(int)    

推荐阅读