【问题标题】:How to aggregate values of a Dataframe by mean in Python?如何在 Python 中平均聚合 Dataframe 的值?
【发布时间】:2020-10-12 06:08:52
【问题描述】:

我有以下数据框,其中包含用户在 2 周内(从 -7 到 7 天)发布的帖子数。我想创建另一个数据框,该数据框应该具有每天发布的平均帖子数。我已经编写了以下代码,但它返回了一个包含 1 列而不是 Dataframe 的系列。所需的 Dataframe 应该有 2 个单独的列用于 daymean

部分数据框 (df)

UserId          Date                -7  -6  -5  -4  -3  -2  -1  0   1   2   3   4   5   6   7
87      2011-05-10 18:38:55.030     0   0   0   0   0   0   1   0   0   0   0   0   0   0   0
487     2011-11-29 14:46:12.080     0   0   1   0   0   0   0   0   0   0   0   0   0   0   0
21      2012-03-02 14:35:06.867     0   1   0   1   2   0   2   2   0   1   2   2   1   3   1

CODE(获取每日平均帖子数)

df.iloc[:,2:].mean()

代码输出

-7  0
-6  0.33
-5  0.33
-4  0.33
-3  0.66
-2  0
-1  1
0   0.66
1   0
2   0.33
3   0.66
4   0.66
5   0.33
6   1
7   0.33

这个输出是正确的,唯一的问题是它是一个系列。如图所示,预期的输出应该有 daymean 的 2 个单独的列。

预期输出

day mean
-7  0
-6  0.33
-5  0.33
-4  0.33
-3  0.66
-2  0
-1  1
0   0.66
1   0
2   0.33
3   0.66
4   0.66
5   0.33
6   1
7   0.33

【问题讨论】:

    标签: python python-3.x pandas dataframe pandas-groupby


    【解决方案1】:

    使用Series.rename_axisSeries.reset_index,因此不需要设置新的列名:

    df1 = df.iloc[:,2:].mean().rename_axis('day').reset_index(name='mean')
    print (df1)
       day      mean
    0   -7  0.000000
    1   -6  0.333333
    2   -5  0.333333
    3   -4  0.333333
    4   -3  0.666667
    5   -2  0.000000
    6   -1  1.000000
    7    0  0.666667
    8    1  0.000000
    9    2  0.333333
    10   3  0.666667
    11   4  0.666667
    12   5  0.333333
    13   6  1.000000
    14   7  0.333333
    

    编辑:使用 seaborn 11:

    sns.lineplot(data=df1, x = 'day', y = 'mean', err_style="bars",ci=68)
    

    【讨论】:

    • 这可以正常工作,但如果我使用此数据绘制线图,则标准偏差不可见。你能提供一种方法来绘制它吗? sns.lineplot(x = df1['day'], y = df1['mean'])
    • @IshanDutta - 使用sns.lineplot(data=df1, x = 'day', y = 'mean')
    • 我用过这个,但它给了我与标准差相同的图。
    • 但这是 2 个不同的图,在 seaborn 标准的情况下应该显示为置信区间或误差线。
    • @IshanDutta - 不幸的是不明白,最后一段解决方案也不起作用?
    猜你喜欢
    • 1970-01-01
    • 2021-12-24
    • 2021-08-12
    • 1970-01-01
    • 2021-09-09
    • 2019-10-02
    • 1970-01-01
    • 2017-12-27
    • 2018-07-21
    相关资源
    最近更新 更多