对于以下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
但我想知道Pandas身上是否有更直接的东西。
3条答案
按热度按时间ivqmmu1c1#
你可以在
StationID
上取groupby
,然后在BiasTemp
上取mean()
。要输出Dataframe
,请使用as_index=False
如果没有
as_index=False
,则返回Series
阅读更多关于
groupby
在这个pydata tutorial .hmae6n7t2#
这就是
groupby
的作用:在这里,我们按“StationID”列分组,然后访问“BiasTemp”列并在其上调用
mean
docs中有一节介绍了此功能。
uqdfh47h3#
可以如下进行: