2015-05-27 8 views
13

में एक और स्तंभ पर वर्गीकृत किया मतलब मूल्यों की गणना करने के लिए निम्न dataframe के लिए:कैसे पांडा

StationID HoursAhead BiasTemp 
SS0279   0   10 
SS0279   1   20 
KEOPS   0   0 
KEOPS   1   5 
BB    0   5 
BB    1   5 

मैं की तरह कुछ प्राप्त करना चाहते हैं:

StationID BiasTemp 
SS0279  15 
KEOPS  2.5 
BB   5 

मैं जानता हूँ कि मैं इस तरह स्क्रिप्ट कुछ कर सकते हैं वांछित परिणाम प्राप्त करने के लिए:

def transform_DF(old_df,col): 
    list_stations = list(set(old_df['StationID'].values.tolist())) 
    header = list(old_df.columns.values) 
    header.remove(col) 
    header_new = header 
    new_df = pandas.DataFrame(columns = header_new) 
    for i,station in enumerate(list_stations): 
     general_results = old_df[(old_df['StationID'] == station)].describe() 
     new_row = [] 
     for column in header_new: 
      if column in ['StationID']: 
       new_row.append(station) 
       continue 
      new_row.append(general_results[column]['mean']) 
     new_df.loc[i] = new_row 
    return new_df 

लेकिन मुझे आश्चर्य है कि पांडा में कुछ और सरल है या नहीं।

उत्तर

15

आप groupbyStationID पर और mean()BiasTemp पर ले सकते हैं। उत्पादन Dataframe करने के लिए, as_index=False

In [4]: df.groupby('StationID', as_index=False)['BiasTemp'].mean() 
Out[4]: 
    StationID BiasTemp 
0  BB  5.0 
1  KEOPS  2.5 
2 SS0279  15.0 

का उपयोग as_index=False के बिना, यह एक Series बजाय

In [5]: df.groupby('StationID')['BiasTemp'].mean() 
Out[5]: 
StationID 
BB   5.0 
KEOPS   2.5 
SS0279  15.0 
Name: BiasTemp, dtype: float64 

इस pydata tutorial में अधिक groupby के बारे में पढ़ें देता है।

5

यह वही है groupby के लिए है:

In [117]: 
df.groupby('StationID')['BiasTemp'].mean() 

Out[117]: 
StationID 
BB   5.0 
KEOPS  2.5 
SS0279 15.0 
Name: BiasTemp, dtype: float64 

यहाँ हम 'StationID' कॉलम GroupBy, हम तो 'BiasTemp' कॉलम का उपयोग और उस पर mean फोन

वहाँ में एक खंड है इस कार्यक्षमता पर docs