簡體   English   中英

將數據幀值拆分為指定數量的組並應用函數 - pandas

[英]split dataframe values into a specified number of groups and apply function - pandas

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組

你可以使用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

假設您有此數據框:

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

你可以使用list comprehension和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]

我查看了注釋,我認為當“通常”的pandas功能無法滿足您的需求時,您可以使用一些顯式的python代碼。

所以:

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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM