将数据帧值拆分为指定数量的组并应用函数 - pandas

时间:2017-05-30 10:24:03

标签: python pandas dataframe split

df=pd.DataFrame([1,4,1,3,2,8,3,6,3,7,3,1,2,9])

我希望将df拆分为指定数量的组,并对每个组中的所有元素求和。例如,将df分为4组

1,4,1,3  2,8,3,6  3,7,3,1  2,9 

会导致

9
19
14
11

我可以df.groupby(np.arange(len(df))//4).sum(),但这不适用于更大的数据帧

例如

df1=pd.DataFrame([1,4,1,3,2,8,3,6,3,7,3,1,2,9,1,5,3,4])
df1.groupby(np.arange(len(df1))//4).sum()

创建5个组而不是4个

3 个答案:

答案 0 :(得分:3)

您可以使用numpy.array_split

df=pd.DataFrame([1,4,1,3,2,8,3,6,3,7,3,1,2,9,1,5,3,4])

a = pd.Series([x.values.sum() for x in np.array_split(df, 4)])
print (a)
0    11
1    27
2    15
3    13
dtype: int64

concatsum的解决方案:

a = pd.concat(np.array_split(df, 4), keys=np.arange(4)).sum(level=0)
print (a)
    0
0  11
1  27
2  15
3  13

答案 1 :(得分:0)

假设你有这个数据框:

df = pd.DataFrame([1,4,1,3,2,8,3,6,3,7,3,1,2,9])

您可以使用列表理解和loc

来实现它
group_size = 4
[df.loc[i:i+group_size-1].values.sum() for i in range(0, len(df), group_size)]

输出:

[9, 19, 14, 11]

答案 2 :(得分:0)

我查看了评论,我认为你可以使用一些明确的python代码,而#34;通常"大熊猫的功能无法满足您的需求。

所以:

import pandas as pd

def get_sum(a, chunks):
    for k in range(0, len(df), chunks):
        yield a[k:k+chunks].values.sum()

df = pd.DataFrame([1,4,1,3,2,8,3,6,3,7,3,1,2,9])

group_size = list(get_sum(df, 4))
print(group_size)

输出:

[9, 19, 14, 11]