2016-09-03 12 views
6

बनाने के लिए कॉलम में कुछ डुप्लिकेट सेल मूल्यों के साथ DataFrame बनाने नाम के बाद एक DataFrame मतलब करने के लिए:योग करने के लिए कैसे और एक अन्य DataFrame

import pandas as pd 
df = pd.DataFrame({'Name': ['Will','John','John','John','Alex'], 
        'Payment': [15, 10, 10, 10, 15], 
        'Duration': [30, 15, 15, 15, 20]}) 

enter image description here

मैं एक और बनाने के द्वारा आगे बढ़ना चाहते हैं डेटाफ्रेम जहां में डुप्लिकेट मान नाम कॉलम समेकित होते हैं, कोई डुप्लीकेट नहीं छोड़ते हैं। उसी समय मैं जॉन भुगतान किए गए भुगतान मूल्यों को पूरा करने के लिए चाहता हूं। मैं के साथ आगे बढ़ना:

df_sum = df.groupby('Name', axis=0).sum().reset_index() 

enter image description here

लेकिन चूंकि df.groupby('Name', axis=0).sum() आदेश DataFrame में हर स्तंभ के लिए योग समारोह लागू होता है अवधि स्तंभ (मिनटों में यात्रा) के रूप में अच्छी तरह से संसाधित किया जाता है। इसके बजाय मैं अवधि कॉलम के लिए औसत मान प्राप्त करना चाहता हूं। तो मैं तो जैसे mean() विधि का उपयोग करने, की आवश्यकता होगी:

df_mean = df.groupby('Name', axis=0).mean().reset_index() 

enter image description here

लेकिन mean() समारोह स्तंभ भुगतान अब औसत भुगतान मूल्यों जॉन बनाया दिखाया जा रहा है और नहीं सभी भुगतान की राशि के साथ ।

डेटाफ्रेम कैसे बनाएं, जहां भुगतान मान औसत मान दिखाते हैं जबकि भुगतान मान योग दिखाते हैं?

+0

कृपया एम्बेडेड छवियों का उपयोग नहीं करते; इसके बजाय पाठ का प्रयोग करें। छवियों को प्रतिलिपि नहीं बनाया जा सकता है और एक कंसोल में चिपकाया जा सकता है, जिसका अर्थ है कि आप किसी ऐसे व्यक्ति से पूछ रहे हैं जो मैन्युअल रूप से टाइप करने के लिए आपके उदाहरण से मेल खाना चाहता है। (देखें [यहां] (http://meta.stackoverflow.com/a/285557/487339) अधिक के लिए।) – DSM

+0

@DSM हालांकि निष्पक्ष होना - उनके पहले कोड ब्लॉक में प्रारंभिक डेटाफ्रेम बनाने के लिए कोड है :) (साथ ही परिणामों को बनाने के लिए जारी किए गए आदेश ...) –

+0

@ निंजापुप्पी: छवियों को एम्बेड न करने के कई कारणों में से केवल एक है (मेटा पोस्ट मैंने लिंक किया है, उदाहरण के लिए) – DSM

उत्तर

8

आप groupby.agg साथ विभिन्न स्तंभों के लिए विभिन्न कार्यों को लागू कर सकते:

df.groupby('Name').agg({'Duration': 'mean', 'Payment': 'sum'}) 
Out: 
     Payment Duration 
Name     
Alex  15  20 
John  30  15 
Will  15  30 
+1

ग्रेट उत्तर। डेटाफ्रेम को विभाजित करने के लिए एक कम सुरुचिपूर्ण दृष्टिकोण होगा, दो कार्यों को लागू करें और फिर उन्हें एक साथ जोड़ दें: pd.concat ([df.loc [:, ['अवधि', 'नाम']]। Groupby ('name')। मतलब(), df.loc [:, ['भुगतान', 'नाम']]। समूहby ('नाम')। योग()], अक्ष = 1) – adabsurdum

संबंधित मुद्दे