[英]Apply function to certain groups of columns of a pandas dataframe
[英]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
concat
和sum
解決方案:
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.