分别计算样本中每个元素的方差

Calculate the variance for each element in the sample separately

我有 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

像这样尝试 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()不一定需要)

这样做:

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

编辑:

峰态没有聚合。您需要这样做:

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

对于您的示例,每组的值少于三个,因此它将 return NaN

使用pandas中的独特功能来乘坐独特的游乐设施并应用循环来乘坐var 示例:

unique_rides = unique(attr['rides'])

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

谢谢