पंडों का समूह-दर और योग


205

मैं इस डेटा फ़्रेम का उपयोग कर रहा हूं:

Fruit   Date      Name  Number
Apples  10/6/2016 Bob    7
Apples  10/6/2016 Bob    8
Apples  10/6/2016 Mike   9
Apples  10/7/2016 Steve 10
Apples  10/7/2016 Bob    1
Oranges 10/7/2016 Bob    2
Oranges 10/6/2016 Tom   15
Oranges 10/6/2016 Mike  57
Oranges 10/6/2016 Bob   65
Oranges 10/7/2016 Tony   1
Grapes  10/7/2016 Bob    1
Grapes  10/7/2016 Tom   87
Grapes  10/7/2016 Bob   22
Grapes  10/7/2016 Bob   12
Grapes  10/7/2016 Tony  15

मैं इसे नाम से और फिर फल के द्वारा प्रति नाम कुल फल प्राप्त करना चाहता हूं।

Bob,Apples,16 ( for example )

मैंने नाम और फल के आधार पर समूह बनाने की कोशिश की लेकिन मुझे कुल फल कैसे मिले।

जवाबों:


209

उपयोग करें GroupBy.sum:

df.groupby(['Fruit','Name']).sum()

Out[31]: 
               Number
Fruit   Name         
Apples  Bob        16
        Mike        9
        Steve      10
Grapes  Bob        35
        Tom        87
        Tony       15
Oranges Bob        67
        Mike       57
        Tom        15
        Tony        1

94
पंडों को कैसे पता चल सकता है कि मैं नाम वाले कर्नल को योग करना चाहता हूं Number?
किंगनेम

12
यदि आप NAME और FRUIT को बाहर निकालते हैं तो @Kingname यह अंतिम कॉलम बचा है। यदि आप 2 कॉलम बचे हैं, तो यह दोनों कॉलम
स्टीवन जी

9
किस कॉलम को योग करने के लिए कैसे निर्दिष्ट करें?
tgdn

34
@tgdn df.groupby (['नाम', 'फल']) ['नंबर'] योग। ()
स्टीवन जी

2
@StevenG किसी विशिष्ट कॉलम को योग करने के लिए दिए गए उत्तर के लिए, आउटपुट डेटाफ्रेम के बजाय पंडस श्रृंखला के रूप में सामने आता है। Jakub Kukul (नीचे उत्तर में) द्वारा टिप्पणी से, हम एक 'Data' पाने के लिए 'संख्या' के आसपास डबल वर्ग कोष्ठक का उपयोग कर सकते हैं।
skdhfgeq2134

178

इसके अलावा आप एग फ़ंक्शन का उपयोग कर सकते हैं,

df.groupby(['Name', 'Fruit'])['Number'].agg('sum')

1
यह स्वीकार किए गए उत्तर से भिन्न है कि यह रिटर्न करता है Seriesजबकि दूसरा एक GroupByवस्तु देता है ।
गौरांग टंडन

11
@GaurangTandon को DataFrameऑब्जेक्ट प्राप्त करने के लिए (जैसे स्वीकृत उत्तर में), डबल स्क्वायर ब्रैकेट का उपयोग करें 'Number', अर्थात:df.groupby(['Name', 'Fruit'])[['Number']].agg('sum')
Jakub Kukul

1
बुरी तरह से एन्कोडेड क्वेरी रिपोर्ट को साफ करने में बहुत मददगार है।
एविएर

92

यदि आप मूल कॉलम रखना चाहते हैं Fruitऔर Name, उपयोग करें reset_index()। अन्यथा Fruitऔर Nameसूचकांक का हिस्सा बन जाएगा।

df.groupby(['Fruit','Name'])['Number'].sum().reset_index()

Fruit   Name       Number
Apples  Bob        16
Apples  Mike        9
Apples  Steve      10
Grapes  Bob        35
Grapes  Tom        87
Grapes  Tony       15
Oranges Bob        67
Oranges Mike       57
Oranges Tom        15
Oranges Tony        1

जैसा कि अन्य उत्तरों में देखा गया है:

df.groupby(['Fruit','Name'])['Number'].sum()

               Number
Fruit   Name         
Apples  Bob        16
        Mike        9
        Steve      10
Grapes  Bob        35
        Tom        87
        Tony       15
Oranges Bob        67
        Mike       57
        Tom        15
        Tony        1

43

दोनों अन्य उत्तर आपको क्या चाहिए पूरा करते हैं।

आप pivotएक अच्छी तालिका में डेटा को व्यवस्थित करने के लिए कार्यक्षमता का उपयोग कर सकते हैं

df.groupby(['Fruit','Name'],as_index = False).sum().pivot('Fruit','Name').fillna(0)



Name    Bob     Mike    Steve   Tom    Tony
Fruit                   
Apples  16.0    9.0     10.0    0.0     0.0
Grapes  35.0    0.0     0.0     87.0    15.0
Oranges 67.0    57.0    0.0     15.0    1.0

19
df.groupby(['Fruit','Name'])['Number'].sum()

आप संख्याओं को जोड़ने के लिए विभिन्न कॉलमों का चयन कर सकते हैं।


7

आप सेट कर सकते हैं groupbyकरने के लिए स्तंभ index तो का उपयोग कर sumके साथlevel

df.set_index(['Fruit','Name']).sum(level=[0,1])
Out[175]: 
               Number
Fruit   Name         
Apples  Bob        16
        Mike        9
        Steve      10
Oranges Bob        67
        Tom        15
        Mike       57
        Tony        1
Grapes  Bob        35
        Tom        87
        Tony       15

3

.Agg () फ़ंक्शन पर एक भिन्नता; (1) को जारी रखने की क्षमता प्रदान करता है प्रकार DataFrame, (2) लागू औसत, मायने रखता है, योग, आदि और (3) सुव्यवस्थितता बनाए रखते हुए कई स्तंभों पर Groupby सक्षम करता है।

df.groupby(['att1', 'att2']).agg({'att1': "count", 'att3': "sum",'att4': 'mean'})

अपने मूल्यों का उपयोग कर ...

df.groupby(['Name', 'Fruit']).agg({'Number': "sum"})
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.