पंडों में दो कॉलम द्वारा समूहीकृत मूल्यों को कैसे योग करें


21

मेरे पास पंडों का डेटाफ़्रेम इस तरह है:

df = pd.DataFrame({
    'Date': ['2017-1-1', '2017-1-1', '2017-1-2', '2017-1-2', '2017-1-3'],
    'Groups': ['one', 'one', 'one', 'two', 'two'],
    'data': range(1, 6)})

    Date      Groups     data  
0  2017-1-1    one       1
1  2017-1-1    one       2
2  2017-1-2    one       3
3  2017-1-2    two       4
4  2017-1-3    two       5

मैं इस तरह एक नया DataFrame कैसे उत्पन्न कर सकता हूं:

    Date       one     two 
0  2017-1-1    3        0
1  2017-1-2    3        4
2  2017-1-3    0        5

जवाबों:


16

pivot_table इसके लिए बनाया गया था:

df.pivot_table(index='Date',columns='Groups',aggfunc=sum)

का परिणाम

         data
Groups    one  two
Date
2017-1-1  3.0  NaN
2017-1-2  3.0  4.0
2017-1-3  NaN  5.0

व्यक्तिगत रूप से मुझे यह दृष्टिकोण समझने में बहुत आसान लगता है, और निश्चित रूप से एक जटिल ग्रुपबी ऑपरेशन की तुलना में अधिक पायथोनिक है। फिर यदि आप चाहते हैं कि प्रारूप निर्दिष्ट हो तो आप इसे ठीक कर सकते हैं:

df.fillna(0,inplace=True)
df.columns = df.columns.droplevel()
df.columns.name = None
df.reset_index(inplace=True)

जो आपको देता है

       Date  one  two
0  2017-1-1  3.0  0.0
1  2017-1-2  3.0  4.0
2  2017-1-3  0.0  5.0

1
अच्छा! यह स्वीकृत उत्तर होना चाहिए।
tuomastik

@ जोश डी। यह अच्छा और सीधा है! मैं मानता हूं कि यह पता लगाने के लिए कुछ मस्तिष्क की शक्ति लेता है कि समूह कैसे काम करता है। धन्यवाद!
केविन

8

पंडों का काला जादू:

df = df.groupby(['Date', 'Groups']).sum().sum(
    level=['Date', 'Groups']).unstack('Groups').fillna(0).reset_index()

# Fix the column names
df.columns = ['Date', 'one', 'two']

परिणाम df:

       Date  one  two
0  2017-1-1  3.0  0.0
1  2017-1-2  3.0  4.0
2  2017-1-3  0.0  5.0

पवित्र! काला जादू कितना शक्तिशाली है! आपका बहुत बहुत धन्यवाद!
केविन

आपका स्वागत है! अद्यतन उत्तर देखें; मैंने अभिव्यक्ति को सरल बनाया और स्तंभ के नामों के लिए एक अनुरोध जोड़ा, जैसा कि अनुरोध किया गया है।
ताउमस्तिक

मुझे लगता है कि आपके पिछले संस्करण का इसका फायदा है क्योंकि इसे अन्य अधिक जटिल डेटा सेटों पर लागू किया जा सकता है। मैंने इसे यहां कॉपी किया: df.groupby (['तिथि', 'समूह', 'डेटा']) [डेटा ']। योग ()। राशि (स्तर = [' तिथि ',' समूह '])। unstack ( 'समूह')। फिलन्ना (0)
केविन

@ केविन अगर यह या भविष्य के किसी उत्तर ने आपकी समस्या हल कर दी है, तो कृपया उत्तर को स्वीकार करें।
tuomastik
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.