簡體   English   中英

Pandas:Dataframe itertuples 布爾系列 groupby 優化

[英]Pandas: Dataframe itertuples boolean series groupby optimization

我是python的新手。 我有數據框(DF)示例:

ID 類型
1 一種
1
2 C
2

我想按 id 添加列示例 A_flag 組。 最后我有數據框(DF):

ID 類型 一只旗
1 一種 1
1 1
2 C 0
2 0

我可以分兩步做到這一點:

  • DF['A_flag_tmp'] = [1 if x.type=='A' else 0 for x in DF.itertuples()]
  • DF['A_flag'] = DF.groupby(['id'])['A_flag_tmp'].transform(np.max)

它正在工作,但對於大數據幀來說非常慢。 有沒有辦法優化這種情況? 感謝幫助。

通過替換 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)    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM