分组一定数量的行pandas

时间:2017-05-17 22:15:46

标签: python pandas

我有一个数据框,让我们说2列:日期和双打

 2017-05-01   2.5
 2017-05-02   3.5
 ...          ...
 2017-05-17   0.2
 2017-05-18   2.5

现在我想做一个groupby并与x行相加。因此,即6行会返回:

 2017-05-06  15.6
 2017-05-12  13.4
 2017-05-18  18.0

有没有一个干净的解决方案来执行此操作而不通过类似这样的for循环运行它:

 temp = pd.DataFrame()
 j = 0
 for i in range(0,len(df.index),6):
      temp[df.ix[i]['date']] = df.ix[i:i+6]['value'].sum()

2 个答案:

答案 0 :(得分:2)

我猜你正在寻找重新取样。考虑这个数据框

rng = pd.date_range('2017-05-01', periods=18, freq='D')
num = np.random.randint(5,size = 18)
df = pd.DataFrame({'date': rng, 'val': num})

df.resample('6D', on = 'date').sum().reset_index()

将返回

    date        val
0   2017-05-01  14
1   2017-05-07  11
2   2017-05-13  16

答案 1 :(得分:1)

这是使用groupby数据帧长度范围的替代解决方案。

使用agg

的两列
df.groupby(np.arange(len(df))//6).agg(lambda x: {'date': x.date.iloc[0], 
                                                 'value': x.value.sum()})

多列您可以将first(或last)用于日期,将sum用于其他列。

group = df.groupby(np.arange(len(df))//6)
pd.concat((group['date'].first(), 
           group[[c for c in df.columns if c != 'date']].sum()), axis=1)