簡體   English   中英

熊貓按慣用方式計算 groupby 組的大小

[英]Pandas count size of groupby groups idiomatically

在 Pandas 中進行 groupby 操作后,我經常想要一個數據幀,用於計算每個組中有多少成員。 我有一種詳細的方法來處理大小、重置索引和重命名,但我相信有更好的方法。

這是我想做的一個例子:

import pandas as pd
import numpy as np

np.random.seed(0)
colors = ['red','green','blue']

cdf = pd.DataFrame({
    'color1':np.random.choice(colors,10),
    'color2':np.random.choice(colors,10),
})
print(cdf)

#better way to do next line? (somehow use agg?)
gb_count = cdf.groupby(['color1','color2']).size().reset_index().rename(columns={0:'num'})
print(gb_count)

#cdf.groupby(['color1','color2']).count() #<-- this doesn't work

最終輸出:

    color1  color2  num
0   blue    green   1
1   blue    red 1
2   green   blue    3
3   red green   4
4   red red 1

為避免獲得 MultiIndex,請使用as_index=False

cdf.groupby(['color1','color2'], as_index=False).size()

  color1 color2  size
0   blue  green     1
1   blue    red     1
2  green   blue     3
3    red  green     4
4    red    red     1

如果您明確想將新列命名為num 您可以將reset_indexname=..一起使用,因為groupby將返回一個系列:

cdf.groupby(['color1','color2']).size().reset_index(name='num')

  color1 color2  num
0   blue  green    1
1   blue    red    1
2  green   blue    3
3    red  green    4
4    red    red    1

另一種方法是在agg操作reset the grouper_index發送到to_frame(with preferred column name)reset the grouper_index

gb_count = cdf.groupby(['color1','color2']).agg('size').to_frame('num').reset_index()



  color1 color2  num
0   blue  green    1
1   blue    red    1
2  green   blue    3
3    red  green    4
4    red    red    1

暫無
暫無

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

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