我有两列的pandas数据框。日期和评分编号,例如:
Date Rating
0 2020-07-28 9
1 2020-07-28 10
2 2020-07-27 8
3 2020-07-26 10
4 2020-07-26 9
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 100 entries, 0 to 99
我想用每天的时间间隔对DataFrame进行重新采样,并计算每天的收视量,并获得每天的平均收视率。因此,新的数据框应如下所示:
Date Amount of Ratings Average rating
0 2020-07-28 2 9.5
1 2020-07-27 1 8
2 2020-07-26 2 9.5
我该怎么做?
我将索引更改为Datetimeindex并使用count()对行进行计数,但是它对所有列进行计数,在这里我想将“评估”列重新采样为“每天的平均评分”。
这是我尝试过的:
df = df.set_index(pd.to_datetime(df['Date']))
df_resampled = df.resample('D').count()
Output:
Date Rating
Date
2020-07-21 17 17
2020-07-22 14 14
2020-07-23 16 16
2020-07-24 14 14
2020-07-25 9 9
答案 0 :(得分:3)
使用df.agg()
在多列上汇总不同的操作
df_resampled = df.resample('D').agg({'Date': 'count', 'Value': 'mean'}))
df_resampled = df_resampled.rename(columns = {'Date' : 'Amount of Ratings' , 'Value' : 'Average rating'})
Output:
Amount of Ratings Average rating
Date
2020-07-26 2 9.5
2020-07-27 1 8.0
2020-07-28 2 9.5
答案 1 :(得分:1)
您可以使用Group by Agg解决此问题:
df2= df.groupby(['Date'], as_index=False).agg(['mean', 'count'])
df2.columns = ['Average rating', 'Amount of Ratings']
df2 = df2.reset_index()
df2
输出:
Date Average rating Amount of Ratings
0 2020-07-26 9.5 2
1 2020-07-27 8.0 1
2 2020-07-28 9.5 2
在here上查看更多信息