【问题标题】:Calculate the variance for each element in the sample separately分别计算样本中每个元素的方差
【发布时间】:2020-11-16 09:45:01
【问题描述】:

我的 DF 包含景点名称、日期和行程总和。

import pandas as pd

attr = pd.DataFrame(
    {'rides':['circuit','circuit',
              'roller coaster', 'roller coaster',
              'car', 'car', 'car',
              'train', 'train'],
    'date':['2019-06-22', '2019-06-23',
            '2019-06-29', '2019-07-06',
            '2019-09-01', '2019-09-07', '2019-09-08',
            '2019-09-14', '2019-09-15'],
    'ride_sum':[663, 483,
                858, 602,
                326, 2, 86,
                70, 134]})

    rides           date        ride_sum
0   circuit         2019-06-22  663
1   circuit         2019-06-23  483
2   roller coaster  2019-06-29  858
3   roller coaster  2019-07-06  602
4   car             2019-09-01  326
5   car             2019-09-07  2
6   car             2019-09-08  86
7   train           2019-09-14  70
8   train           2019-09-15  134

我可以手动计算,但我的数据框有 1000 多条线路和 30 多个不同的游乐设施。

在示例中,它看起来像这样

print(attr.loc[attr['rides'] == 'circuit']['ride_sum'].var(),
      attr.loc[attr['rides'] == 'roller coaster']['ride_sum'].var(),
      attr.loc[attr['rides'] == 'car']['ride_sum'].var(),
      attr.loc[attr['rides'] == 'train']['ride_sum'].var())

16200.0 32768.0 28272.0 2048.0

我想为每个游乐设施获取一个数据框,看起来像这样

    rides           var
0   circuit         16200.0
1   roller coaster  32768.0
2   car             28272.0
3   train           2048.0

【问题讨论】:

    标签: pandas variance


    【解决方案1】:

    像这样尝试groupbyvar()

    attr.groupby("rides").var().reset_index()
    
    
    rides   ride_sum
    0   car 28272
    1   circuit 16200
    2   roller coaster  32768
    3   train   2048
    

    reset_index() 不一定是必需的)

    【讨论】:

    • 谢谢!我怎样才能为峰度做到这一点?如果我尝试替换它,我会得到 'DataFrameGroupBy' 对象没有属性 'kurtosis'
    • 对于峰态,请参阅@Serge de Gosson de Varennes 的编辑答案。除此之外,您还可以在 apply 方法中使用 scipy.stats.kurtosis
    【解决方案2】:

    这样做:

    attr.groupby(attr.rides).agg(["var"]).reset_index()
    

    编辑:

    对于峰态,没有聚合。你需要这样做:

    attr.groupby(attr.rides).apply(pd.DataFrame.kurt).reset_index()
    

    在您的示例中,每个组的值少于三个,因此它将返回 NaN

    【讨论】:

    • 谢谢!我怎样才能为峰度做到这一点?如果我尝试替换它,我会得到“SeriesGroupBy”对象没有属性“kurtosis”
    【解决方案3】:

    使用 pandas 中独有的函数来获取独特的游乐设施,并应用循环 for 来获取 var 示例:

    unique_rides = unique(attr['rides'])
    
    for ride in unque_rides:
        print(attr.loc[attr['rides'] == ride]['ride_sum'].var())
    

    谢谢

    【讨论】:

    • 谢谢!我怎样才能得到字典中的结果?
    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 2023-03-17
    • 2017-07-20
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多