熊猫分组,同时包含行"mean"和列表



我有一个包含日期、姓名和数值分数的数据帧。我想用pd。Groupby创建一个新的df,其中包含数字在每小时间隔内的平均值,以及在该小时内出现的所有名字的列表:

What I have:

<表类> 日期 名称 得分 tbody><<tr>1小时52小时B22小时C62小时D4

如果需要每个值的列表,也可以使用具有名称聚合的GroupBy.agg元素列表:

df1 = (df.groupby([pd.Grouper(key="date",freq='60min')])
.agg(Name = ("Name",list), Avg = ("Score","mean")))

或:

df1 = (df.groupby(df["date"].dt.hour)
.agg(Name = ("Name",list), Avg = ("Score","mean")))

print (df1)
Name  Avg
date                
1           [A]    5
2     [B, C, D]    4

如果需要单个元素的标量,则需要自定义函数:

df1 = (df.groupby(df["date"].dt.hour)
.agg(Name = ("Name",lambda x: list(x) if len(x)>1 else x), Avg = ("Score","mean")))
print (df1)
Name  Avg
date                
1             A    5
2     [B, C, D]    4

最后一次使用Hours列:

df1 = df1.reset_index().rename(columns={"date":"Hours"})

最新更新