我是一个大熊猫的新手,我需要更有经验的开发人员的帮助。 假设我有一个这样的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 ... ... ...
这样做最有效/最优雅的方法是什么?
答案 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