DF我的目標是按列的值對資料框進行分組,Name并將特定列聚合為總和。
當前資料框
| 姓名 | val1 | val2 | val3 | |
|---|---|---|---|---|
| 0 | 測驗 | 鈉 | 5 | 鈉 |
| 1 | 測驗 | 30 | 鈉 | 3 |
| 2 | 測驗 | 30 | 鈉 | 3 |
輸出除外
| 姓名 | val1 | val2 | val3 | |
|---|---|---|---|---|
| 0 | 測驗 | 60 | 5 | 3 |
我試過的
DF.groupby(['Name'], as_index=False)[["Val1"]].sum()
回傳
| 姓名 | val1 | |
|---|---|---|
| 0 | 測驗 | 60 |
問題
我想將val2andval3 作為獨特的值,然后將它們分組,但我不知道該怎么做。
也許引入一個中間 DF
| 姓名 | val1 | val2 | val3 | |
|---|---|---|---|---|
| 0 | 測驗 | 鈉 | 5 | 3 |
| 1 | 測驗 | 30 | 5 | 3 |
| 2 | 測驗 | 30 | 5 | 3 |
以便以下代碼可以作業:
DF.groupby(['Name','val2','val3'], as_index=False)[["Val1"]].sum()
請記住,我的資料框中有幾個值Name。
最好的方法是什么?
uj5u.com熱心網友回復:
如果我理解正確,每組的 val2 和 val3 列中只有一個唯一的非缺失值。否則,您的問題沒有多大意義,因為您沒有指定如何決定從這些列中獲取哪個值。
鑒于這些限制,您可以使用:
result = df.groupby('Name', as_index=False).agg({'Val1': 'sum', 'val2': 'first', 'val3': 'first'})
uj5u.com熱心網友回復:
要在聚合其他列時按一列或多列分組,您可以使用groupBy后跟aggregate(或其別名agg)。
例子
給定輸入:
Waiter Revenue Hours Tables Gender
0 Alice 3000 3.0 Outside f
1 Bob 2000 4.0 Inside m
2 Alex 1000 2.0 Inside d
3 Alex 500 0.5 Outside None
預期輸出:
Revenue Hours Tables Gender
Waiter
Alex 1500 1.25 {Inside, Outside} d
Alice 3000 3.00 {Outside} f
Bob 2000 4.00 {Inside} m
按Waiter節目分組:
- 的總和_
Revenue - 作業的平均值
Hours - 唯一服務的集合_
Tables - 第一個(非未定義的)值
Gender
如何通過特定聚合進行分組
代碼:
import pandas as pd
df = pd.DataFrame({'Waiter': ['Alice','Bob','Alex', 'Alex'], 'Revenue': [3000, 2000, 1000, 500], 'Hours': [3, 4, 2, 0.5], 'Tables': ['Outside', 'Inside', 'Inside', 'Outside'], 'Gender': ['f', 'm', 'd', None]})
df.groupby(['Waiter']).agg({'Revenue': 'sum', 'Hours': 'mean', 'Tables': lambda x: set(x), 'Gender': 'first'})
解釋:
groupby可以做多個單列,這里只Waiteragg(或aggregate)通過定義每一列的聚合的字典。該列被指定為鍵Revenue,如聚合函式指定為函式名稱'sum'(在引號中或作為參考,如list)或 lambdalambda x: set(x)
注意:要獲取串列,Tables我們還可以將以下值定義為聚合函式:
'unique'生成具有唯一值的串列(請參閱Series.unique)set就像我們對 lambda 所做的那樣list對于串列(可能包含重復項)
也可以看看
- pandas groupby 多個聚合/應用多個列
- 如何從熊貓 groupby 中的多列中獲取唯一值
- 如何在 Pandas 中按多列分組
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/468525.html
標籤:Python 数据框 熊猫-groupby
