如何用 group-by 和 sum 獲得 Pandas 總和
Asad Riaz
2023年1月30日
2020年3月28日
我們將演示如何獲取 Pandas 的 groupby 和 sum 的總和。我們還將研究 pivot
功能,以將資料排列在一個漂亮的表中,以及如何定義自定義函式並將其應用到 DataFrame
上。我們還能通過使用 agg()
獲得總和。
groupby
的累計總和
我們可以使用 groupby
方法來獲得累計和。比如以下具有日期,水果名稱和銷售的 DataFrame
:
import pandas as pd
df = pd.DataFrame({'Date': ['08/09/2018', '10/09/2018', '08/09/2018', '10/09/2018'],
'Fruit': ['Apple', 'Apple', 'Banana', 'Banana',],
'Sale': [34, 12, 22, 27]})
如果我們要計算每個水果在每個日期的累計銷售總額,則可以執行以下操作:
import pandas as pd
df = pd.DataFrame({'Date': ['08/09/2018', '10/09/2018', '08/09/2018', '10/09/2018'],
'Fruit': ['Apple', 'Apple', 'Banana', 'Banana',],
'Sale': [34, 12, 22, 27]})
print (df.groupby(by=['Fruit','Date']).sum().groupby(level=[0]).cumsum())
輸出:
Fruit Date Sale
Apple 08/09/2018 34
10/09/2018 46
Banana 08/09/2018 22
10/09/2018 49
pivot()
在一個漂亮的表中重新排列資料
pivot()
方法可以設定表格的行和列屬性。讓我們更改上面的程式碼,並應用 pivot()
方法重新排列漂亮表中的資料:
import pandas as pd
df = pd.DataFrame({'Date': ['08/09/2018', '10/09/2018', '08/09/2018', '10/09/2018'],
'Fruit': ['Apple', 'Apple', 'Banana', 'Banana',],
'Sale': [34, 12, 22, 27]})
print (df.groupby(['Fruit','Date'],as_index = False).sum().pivot('Fruit','Date').fillna(0))
輸出:
Sale
Date 08/09/2018 10/09/2018
Fruit
Apple 34 12
Banana 22 27
Pandas 中將函式應用於 groupby
我們將建立一個簡單的方法來獲取 series
或一維陣列中的值計數,並使用 groupby
來獲取每個值的總計數:
from pandas import *
d = {"series": Series(['1','2','1','1','4','4','5'])}
df = DataFrame(d)
def get_count(values):
return len(values)
grouped_count = df.groupby("series").series.agg(get_count)
print(grouped_count)
執行程式碼後,我們將獲得以下輸出,該輸出提供 series
中每個值的出現次數。
輸出:
series
1 3
2 1
4 2
5 1
Name: series, dtype: int64
agg()
獲取列的總和
我們可以使用 agg()
在列上應用求和運算。考慮以下程式碼:
import pandas as pd
df = pd.DataFrame({'Date': ['08/09/2018', '10/09/2018', '08/09/2018', '10/09/2018'],
'Fruit': ['Apple', 'Apple', 'Banana', 'Banana',],
'Sale': [34, 12, 22, 27]})
print(df.groupby(['Fruit'])['Sale'].agg('sum'))
輸出:
Fruit
Apple 46
Banana 49
Name: Sale, dtype: int64