如何根据唯一元素合并DataFrame中的行并获得平均值?

时间:2015-03-25 23:02:07

标签: python pandas dataframe

我正在努力弄清楚如何实现这一目标。我正在尝试为每个priceday条目获取平均值hour。所以像

这样的DataFrame
    day     hour    price   booked
0   monday  7      12.0     True
1   monday  8      12.0     False
2   tuesday 7      13.0     True
3   tuesday 8      13.0     False
4   monday  7      15.0     True
5   monday  8      13.0     False
6   tuesday 7      13.0     True
7   tuesday 8      15.0     False

应该给出类似的东西:

    day     hour    avg. price  
0   monday  7       13 
1   monday  8       12.5    
2   tuesday 7       13.0 
3   tuesday 8       14.0 

我希望这可以概括为更大的数据集。

1 个答案:

答案 0 :(得分:2)

您可以按天和小时列进行分组,然后在价格列上调用mean

In [46]:

df.groupby(['day','hour'])['price'].mean()
Out[46]:
day      hour
monday   7       13.5
         8       12.5
tuesday  7       13.0
         8       14.0
Name: price, dtype: float64

要将日期和小时恢复为列,您可以调用reset_index

In [47]:

df.groupby(['day','hour'])['price'].mean().reset_index()
Out[47]:
       day  hour  price
0   monday     7   13.5
1   monday     8   12.5
2  tuesday     7   13.0
3  tuesday     8   14.0

如果您愿意,也可以重命名该列:

In [48]:

avg = df.groupby(['day','hour'])['price'].mean().reset_index()
avg.rename(columns={'price':'avg_price'},inplace=True)
avg
Out[48]:
       day  hour  avg_price
0   monday     7       13.5
1   monday     8       12.5
2  tuesday     7       13.0
3  tuesday     8       14.0