根据两列对熊猫数据框重新采样

时间:2020-07-29 09:50:32

标签: python pandas

我有两列的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

2 个答案:

答案 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上查看更多信息