2012-11-06 31 views
15

में एकत्रित स्तंभ बनाना एक उदाहरण के रूप में नीचे DataFrame के साथ,पांडा: DataFrame

In [83]: 
df = pd.DataFrame({'A':[1,1,2,2],'B':[1,2,1,2],'values':np.arange(10,30,5)}) 
df 
Out[83]: 
    A B values 
0 1 1  10 
1 1 2  15 
2 2 1  20 
3 2 2  25 

क्या स्तंभों में से एक से अधिक डेटा के कुछ एकत्रीकरण युक्त एक नया स्तंभ उत्पन्न करने के लिए एक आसान तरीका हो सकता है?

उदाहरण के लिए

, अगर मैं A

In [84]: 
df.groupby('A').sum()['values'] 
Out[84]: 
A 
1 25 
2 45 
Name: values 

में values से अधिक आइटम योग मैं

A B values sum_values_A 
0 1 1  10   25 
1 1 2  15   25 
2 2 1  20   45 
3 2 2  25   45 

उत्तर

20
In [20]: df = pd.DataFrame({'A':[1,1,2,2],'B':[1,2,1,2],'values':np.arange(10,30,5)}) 

In [21]: df 
Out[21]: 
    A B values 
0 1 1  10 
1 1 2  15 
2 2 1  20 
3 2 2  25 

In [22]: df['sum_values_A'] = df.groupby('A')['values'].transform(np.sum) 

In [23]: df 
Out[23]: 
    A B values sum_values_A 
0 1 1  10   25 
1 1 2  15   25 
2 2 1  20   45 
3 2 2  25   45 
+0

बढ़िया! मुझे पता था कि एक लाइनर होना था। धन्यवाद। – foglerit

3

मैं एक तरह से join का उपयोग कर पाया कैसे प्राप्त कर सकते हैं:

In [101]: 
aggregated = df.groupby('A').sum()['values'] 
aggregated.name = 'sum_values_A' 
df.join(aggregated,on='A') 

Out[101]: 
    A B values sum_values_A 
0 1 1  10   25 
1 1 2  15   25 
2 2 1  20   45 
3 2 2  25   45 

कोई भी एक है ऐसा करने का आसान तरीका?

3

यह बहुत सीधा नहीं है, लेकिन मैंने पाया यह बहुत सहज ज्ञान युक्त (मानचित्र के उपयोग के एक और स्तंभ से नए कॉलम बनाने के लिए) और कई अन्य मामलों के लिए लागू किया जा सकता है:

gb = df.groupby('A').sum()['values'] 

def getvalue(x): 
    return gb[x] 

df['sum'] = df['A'].map(getvalue) 
df 
+0

धन्यवाद , नक्शा विधि बहुत शक्तिशाली लगता है। निश्चित रूप से इसका उपयोग अक्सर करेंगे। – foglerit

2
In [15]: def sum_col(df, col, new_col): 
    ....:  df[new_col] = df[col].sum() 
    ....:  return df 

In [16]: df.groupby("A").apply(sum_col, 'values', 'sum_values_A') 
Out[16]: 
    A B values sum_values_A 
0 1 1  10   25 
1 1 2  15   25 
2 2 1  20   45 
3 2 2  25   45 
संबंधित मुद्दे