Python 如何计算熊猫中另一列上分组的平均值
对于以下数据帧:Python 如何计算熊猫中另一列上分组的平均值,python,pandas,dataframe,Python,Pandas,Dataframe,对于以下数据帧: StationID HoursAhead BiasTemp SS0279 0 10 SS0279 1 20 KEOPS 0 0 KEOPS 1 5 BB 0 5 BB 1 5 我想买一些像这样的东西: StationID
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
但我想知道熊猫身上是否有更直接的东西。这就是为什么:
在这里,我们按“StationID”列分组,然后访问“BiasTemp”列并在其上调用mean
中有一个关于此功能的部分。您可以在
StationID
上选择groupby
,然后在BiasTemp
上选择mean()。要输出数据帧
,请使用作为_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
,它将返回一个系列
In [5]: df.groupby('StationID')['BiasTemp'].mean()
Out[5]:
StationID
BB 5.0
KEOPS 2.5
SS0279 15.0
Name: BiasTemp, dtype: float64
阅读此pydata中有关groupby的更多信息。可按如下方式完成:
df.groupby('StationID').mean()
这与执行诸如.transform(numpy.mean)
或.apply(numpy.mean)
之类的操作有多大不同?
df.groupby('StationID').mean()