2 回答

TA貢獻1995條經驗 獲得超2個贊
這是因為您傳遞的分組參數無法將數據幀切成所需的部分。所以它只是復制整個數據框并將其“壓縮”到您傳遞的分組數組中。一個例子 -
a = pd.DataFrame([[True,False,False],[False,True,False]], columns=['A','B','C'])
c = a.groupby([True,False])
print('length of grouper object:',len(c))
print(' ')
print(list(c)[0])
print(' ')
print(list(c)[1])
length of grouper object: 2
(False, A B C
1 False True False)
(True, A B C
0 True False False)
請注意,使用分組數組 [False, True],它只是將整個數據幀 a 與每個壓縮在一起。如果您改為傳遞它可以在軸 1 中找到的內容,它將考慮將該系列中的項目用于對數據集進行分組。
另一種看待它的方法是,分組參數需要是一個帶有名稱的系列,并且該名稱應該在數據框的列中找到。如果你傳遞一個數組 [True, False],它基本上被解釋為一個無名系列,因此無法獲得它的鍵來進行拆分。
如果你想了解 groupby 的工作原理,下面是一個很好的圖像 -
拆分發生在提供的鍵上,并且該鍵需要在索引/列中可引用,否則它無法拆分并簡單地返回每個組的未拆分數據幀。第一步是石斑魚所做的,接下來是應用和組合步驟,這些步驟很簡單。在您上面看到的元組(打印輸出)中,apply 函數對t[1]
每個元組的元素進行操作,然后將其與t[0]
每個元組的元素組合并垂直連接。

TA貢獻1777條經驗 獲得超3個贊
讓我們分解一下
.groubpy().apply(pd.DataFrame)
正如您在所有變體中使用的那樣,從每個組中獲取行并創建一個數據框,該數據框基本上返回self
,因此輸出看起來相同,但 pandas 到達那里的方式在每種情況下都不同
b=a.groupby([False,False])
:兩行屬于同一個組(group_idFalse
),一起解析一次形成相同的dfc=a.groupby([True,False])
:有兩組,每組一行。Apply 獲取每個組并構建兩個單獨的 DataFrame(每個組一個)。然后連接并返回與原始相同的 dfd=a.groupby([False,True])
: 與 #2 相同,但現在第一行屬于 groupFalse
。如果您聚合或應用了不同的函數(pandas.DataFrame 除外),您會看到 df 作為True, False
索引(默認情況下按 groupby 排序)并且第 1 行將顯示為第一行,因為它屬于組True
添加回答
舉報