如何计算在Pandas中另一列上分组的平均值

时间:2015-05-27 12:12:13

标签: python pandas dataframe

对于以下数据框:

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

我知道我可以编写类似这样的内容来获得所需的结果:

 $.ajax({

            url: '@Url.Action("GetPolicyPremiumAllocation", "Policy")',
            data: { policyID: selPolicyId },
            cache:false,

            type: 'POST',
            success: function (data) {

                if (data.length > 0) {
                    alert(data);
                    document.getElementById("modal_dialog").innerHTML = "";                        

                   // $("#modal_dialog").empty();
                    $("#modal_dialog").load(data,function( ) { 
                        $("#close-button-id").on("click", CloseDialog);
                    });
                    $("#modal_dialog").dialog("open");                                             
                     }
            }                   

        });

但我想知道熊猫中是否有更直接的东西。

3 个答案:

答案 0 :(得分:40)

您可以在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

答案 1 :(得分:6)

这是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'专栏,然后我们访问' BiasTemp'列并在其上调用mean

此功能docs中有一个部分。

答案 2 :(得分:1)

可以执行以下操作:

df.groupby('StationID').mean()