对于以下数据框:
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");
}
}
});
但我想知道熊猫中是否有更直接的东西。
答案 0 :(得分:40)
您可以在groupby
上StationID
然后在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()