我是熊猫的新手,我需要更有经验的开发人员的帮助。假设我有这样一个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小时列表示一天中的时间。我想修改这个dataframe,将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 ... ... ...最有效/最优雅的方法是什么?
发布于 2014-08-11 14:27:09
您将希望分组在值的范围内:
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']发布于 2014-08-11 14:30:04
在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 39174479https://stackoverflow.com/questions/25245293
复制相似问题