天天看點

python的groupby中函數詳解_python – pandas groupby中的聚合函數是否以不同方式處理内置函數?...

在讨論

https://stackoverflow.com/a/47543066/9017455時遇到了這種看似奇怪的行為.

OP有這個資料幀:

x = pd.DataFrame.from_dict({

'cat1':['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C'],

'cat2':['X', 'X', 'Y', 'Y', 'Y', 'Y', 'Z', 'Z']})

并希望為每組cat1值找到唯一的cat2值.

一種選擇是聚合并使用lambda來建立一組唯一值:

x.groupby('cat1').agg(lambda x: set(x))

# Returns

cat2

cat1

A {X, Y}

B {Y}

C {Z, Y}

我假設使用set本身就相當于lambda,因為它是可調用的,但是:

x.groupby('cat1').agg(set)

# Returns

cat2

cat1

A {cat1, cat2}

B {cat1, cat2}

C {cat1, cat2}

如果我定義一個合适的函數,我會得到與lambda方法相同的行為,通過這樣做,我可以看到pandas調用函數與一個函數.似乎使用DataFrame調用set,是以它在疊代對象時傳回列名稱集.

這似乎是不一緻的行為.誰能解釋為什麼Pandas對内置函數的處理方式不同?

編輯

檢視SeriesGroupBy.agg的行為方式可能會提供更多見解.将任何類型傳遞給此函數會導緻錯誤“TypeError:’type’對象不可疊代”.

x.groupby('cat1')['cat2'].agg(set)