熊猫通过大数据框按不同的聚合值分组

时间:2019-12-23 18:45:28

标签: python pandas

我有一个700列以上的数据框。我正在用一个列进行分组,比方说df.a,我想用平均值来汇总除最后10个列以外的所有列,而我要汇总我的最大值。我知道要创建一个条件字典,然后像这样传递给groupby:

d = {'DATE': 'last', 'AE_NAME': 'last', 'ANSWERED_CALL': 'sum'}

res = df.groupby(df.a).agg(d)

但是,我有这么多列,所以我不想全部写出来。有快速的方法吗?

2 个答案:

答案 0 :(得分:2)

您可以使用zip和一些不太优雅的代码imo,但它可以工作:

cols = df.drop("A", axis=1).columns # drop groupby column since not in agg

len_means = len(cols[:-10]) # grabbing all cols except the last ten ones

len_max = len(cols[-10:] # grabbing the last ten cols length

d_means = {i:j for i,j in zip(cols[:-10], ["mean"]*len_means)}

d_max = {i:j for i,j in zip(cols[-10:], ["max"]*len_max)}

d = d_means.update(d_max}

res = df.groupby(df.a).agg(d)

编辑:由于OP提到的列的名称不同(以字母c结尾)

c_cols = [col for col in df.columns if col.endswith('c')]
non_c_cols = [col for col in df.columns if col not in c_cols]

并且只需要将cols插入上面的代码中即可获得结果

答案 1 :(得分:1)

我将通过以下方法解决此问题:

  1. 定义要选择的列的截止值
  2. 选择所需的列
  3. 使用mean创建maxGroupBy聚合
  4. Join将两个数据框放在一起:
# example dataframe
df = pd.DataFrame(np.random.rand(5,10), columns=list('abcdefghij'))
df.insert(0, 'ID', ['aaa', 'bbb', 'aaa', 'ccc', 'bbb'])

    ID         a         b         c         d         e         f         g         h         i         j
0  aaa  0.228208  0.822641  0.407747  0.416335  0.039717  0.854789  0.108124  0.666190  0.074569  0.329419
1  bbb  0.285293  0.274654  0.507607  0.527335  0.599833  0.511760  0.747992  0.930221  0.396697  0.959254
2  aaa  0.844373  0.431420  0.083631  0.656162  0.511913  0.486187  0.955340  0.130358  0.759013  0.181874
3  ccc  0.259888  0.992480  0.365106  0.041288  0.833069  0.474904  0.212645  0.178981  0.595891  0.143127
4  bbb  0.823457  0.172947  0.907415  0.719616  0.632012  0.199703  0.672745  0.563852  0.120827  0.092455
cutoff = 7
mean_cols = df.columns[:cutoff]
max_cols = ['ID'] + df.columns[cutoff:].tolist()

df1 = df[mean_cols].groupby('ID').mean()
df2 = df[max_cols].groupby('ID').max()

df = df1.join(df2).reset_index()

    ID         a         b         c         d         e         f         g         h         i         j
0  aaa  0.536290  0.627031  0.245689  0.536248  0.275815  0.670488  0.955340  0.666190  0.759013  0.329419
1  bbb  0.554375  0.223800  0.707511  0.623476  0.615923  0.355732  0.747992  0.930221  0.396697  0.959254
2  ccc  0.259888  0.992480  0.365106  0.041288  0.833069  0.474904  0.212645  0.178981  0.595891  0.143127