【发布时间】:2019-08-27 03:17:05
【问题描述】:
我正在寻找一种聚合大型数据框的方法,可能使用 groupby。每个组将基于预先指定的列或正则表达式,并且聚合应生成命名输出。
这会生成一个示例数据框:
import pandas as pd
import itertools
import numpy as np
col = "A,B,C".split(',')
col1 = "1,2,3,4,5,6,7,8,9".split(',')
col2 = "E,F,G".split(',')
all_dims = [col, col1, col2]
all_keys = ['.'.join(i) for i in itertools.product(*all_dims)]
rng = pd.date_range(end=pd.Timestamp.today().date(), periods=12, freq='M')
df = pd.DataFrame(np.random.randint(0, 1000, size=(len(rng), len(all_keys))), columns=all_keys, index=rng)
上面生成了一个数据框,其中包含一年的月度数据,包含 36 列,名称如下:
['A.1.E', 'A.1.F', 'A.1.G', 'A.2.E', 'A.2.F', 'A.2.G', 'A.3.E', 'A.3.F',
'A.3.G', 'A.4.E', 'A.4.F', 'A.4.G', 'A.5.E', 'A.5.F', 'A.5.G', 'A.6.E',
'A.6.F', 'A.6.G', 'A.7.E', 'A.7.F', 'A.7.G', 'A.8.E', 'A.8.F', 'A.8.G',
'A.9.E', 'A.9.F', 'A.9.G', 'B.1.E', 'B.1.F', 'B.1.G', 'B.2.E', 'B.2.F',
'B.2.G', 'B.3.E', 'B.3.F', 'B.3.G', 'B.4.E', 'B.4.F', 'B.4.G', 'B.5.E',
'B.5.F', 'B.5.G', 'B.6.E', 'B.6.F', 'B.6.G', 'B.7.E', 'B.7.F', 'B.7.G',
'B.8.E', 'B.8.F', 'B.8.G', 'B.9.E', 'B.9.F', 'B.9.G', 'C.1.E', 'C.1.F',
'C.1.G', 'C.2.E', 'C.2.F', 'C.2.G', 'C.3.E', 'C.3.F', 'C.3.G', 'C.4.E',
'C.4.F', 'C.4.G', 'C.5.E', 'C.5.F', 'C.5.G', 'C.6.E', 'C.6.F', 'C.6.G',
'C.7.E', 'C.7.F', 'C.7.G', 'C.8.E', 'C.8.F', 'C.8.G', 'C.9.E', 'C.9.F',
'C.9.G']
我现在想要的是能够聚合数据框并采用某些列组合并生成命名输出。例如,一个规则可能是我将获取所有“A.*.E”列(中间有任何数字),对它们求和并生成一个名为“A.SUM.E”的命名输出列。然后对 'A.*.F'、'A.*.G' 等执行相同的操作。
我查看了 pandas 25 named aggregation,它允许我命名我的输出,但我看不到如何同时捕获正确的列组合并生成正确的输出名称。
如果您需要重塑数据框以制定可行的解决方案,那也可以。
注意,我知道我可以在 Python 循环中执行类似的操作,但我正在寻找一种 pandas 的方式来执行此操作。
【问题讨论】:
标签: python pandas pandas-groupby