数据帧处理/分组:如何对每n行进行分组

时间:2014-08-11 14:08:35

标签: python pandas dataframe

我是一个大熊猫的新手,我需要更有经验的开发人员的帮助。 假设我有一个这样的Dataframe:

    Hour  ENTRIES_hourly_rainy  ENTRIES_hourly_not_rainy  ENTRIES_hourly_total
0      0               3559751                   7248389              10808140
1      1               1606880                   3361780               4968660
2      2                145719                    282413                428132
3      3                 26804                     54543                 81347
4      4                766333                   1672134               2438467
5      5                379272                    800500               1179772
6      6                 59030                    123764                182794
7      7                140758                    242930                383688
8      8               1950224                   3544500               5494724
9      9               3806660                   7234291              11040951
10    10                477959                    837528               1315487
11    11                235289                    410994                646283
12    12               7787028                  15026342              22813370
13    13               3145361                   6265131               9410492
14    14                388437                    776277               1164714
15    15                149688                    297624                447312
16    16               5735102                  11601840              17336942
17    17               4250723                   8442271              12692994
18    18                564774                   1123973               1688747
19    19                290350                    544482                834832
20    20               8302496                  16203000              24505496
21    21               4452747                   8668253              13121000
22    22                418217                    784093               1202310
23    23                115005                    230668                345673

“小时”列表示一天中的小时。 我想修改这个数据帧,将4个组中的行分组,并将其他列相加,总共有4行:

    Hour  ENTRIES_hourly_rainy  ENTRIES_hourly_not_rainy  ENTRIES_hourly_total
0    0-3               5339154                   10664712             16003866
1    4-7               ...                       ...                  ...
2    8-11              ...                       ...                  ...
3    12-15             ...                       ...                  ...
4    16-19             ...                       ...                  ...
5    20-23             ...                       ...                  ...

这样做最有效/最优雅的方法是什么?

2 个答案:

答案 0 :(得分:1)

您希望您的分组符合以下值:

df['Hour'] = np.int64(df['Hour'] / 4)

然后你可以轻松聚合:

df.groupby('Hour').sum()

如果您确实需要将Hour列重命名为0-3,那么您可以

df.eval('Upper = ((Hour + 1) * 4) - 1')
df['Hour'] = df.Hour.astype(str) + '-' + df.Upper.astype(str)
del df['Upper']

答案 1 :(得分:-1)

在R中你可以这样做:

gp = as.integer(d$Hour/4)
tapply(d$ENTRIES_hourly_rainy, gp, sum)

#       0        1        2        3        4        5 
# 5339154  1345393  6470132 11470514 10840949 13288465 

只需将其应用于每一栏:

gp = as.integer(d$Hour/4)
apply(d[, -1], 2, function(col)tapply(col, gp, sum))

ENTRIES_hourly_rainy ENTRIES_hourly_not_rainy ENTRIES_hourly_total
0              5339154                 10947125             16286279
1              1345393                  2839328              4184721
2              6470132                 12027313             18497445
3             11470514                 22365374             33835888
4             10840949                 21712566             32553515
5             13288465                 25886014             39174479