我的問題與此處的另一篇文章有??關我如何通過熊貓分組獲得總和? 但它沒有回答我的問題。
我有這個資料框:
Fruit Name Number
Apples Bob 7
Apples Bob 8
Apples Mike 9
Apples Steve 10
Apples Bob 1
Oranges Bob 2
Oranges Tom 15
Oranges Mike 57
Oranges Bob 65
Oranges Tony 1
Grapes Bob 1
Grapes Tom 87
Grapes Bob 22
Grapes Bob 12
Grapes Tony 15
Melons Mike 10
我想獲得一個資料框,其中第一列應該包含上面“水果”列中的所有唯一值;第二列應該有來自“數字”列的值的總和,但僅限于一個人,比如上面的 Bob。如果此人沒有特定的水果,則第二列應為 0。這是所需的輸出:
Fruit NumberForBob
Apples 7 8 1=16
Oranges 2 65=67
Grapes 1 22 12=35
Melons 0
我想我需要混合使用 if 陳述句和 groupby 函式,但我無法獲得所需的輸出。我怎樣才能做到這一點?
uj5u.com熱心網友回復:
嘗試使用 pivot_table
pivot = df.pivot_table(index='Fruit', columns='Name',
values='Number', aggfunc=sum)
Name Bob Mike Steve Tom Tony
Fruit
Apples 16.0 9.0 10.0 NaN NaN
Grapes 35.0 NaN NaN 87.0 15.0
Melons NaN 10.0 NaN NaN NaN
Oranges 67.0 57.0 NaN 15.0 1.0
然后
print(pivot['Bob'])
Fruit
Apples 16.0
Grapes 35.0
Melons NaN
Oranges 67.0
Name: Bob, dtype: float64
fill_value=0如果需要,您也可以添加
uj5u.com熱心網友回復:
如果您需要對所有名稱進行此操作,則需要按水果和名稱進行分組。
但是,你們只需要 Bob:黃金法則,如果您必須立即丟棄它,請不要計算不必要的東西。
過濾 Bob 的資料,計算groupby.sum,reindex具有獨特的水果:
(df.loc[df['Name'].eq('Bob')]
.groupby('Fruit')['Number'].sum()
.reindex(df['Fruit'].unique(), fill_value=0)
)
輸出:
Fruit
Apples 16
Oranges 67
Grapes 35
Melons 0
Name: Number, dtype: int64
替代輸出:
(df.loc[df['Name'].eq('Bob')]
.groupby('Fruit')['Number'].sum()
.reindex(df['Fruit'].unique(), fill_value=0)
.reset_index(name='NumberForBob')
)
Fruit NumberForBob
0 Apples 16
1 Oranges 67
2 Grapes 35
3 Melons 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/519465.html
標籤:Python熊猫数据框
上一篇:選定列乘以給定向量
下一篇:熊貓行中最大值的決勝局
