下面我定义了两个数据帧,输入和输出。
df_input
:
A
。 B
是一种包含A
,枚举组的索引。C
包含要汇总的元素。 df_output
:
D
在每个A
组中,取C
个元素的平均值,但只取其中的前半部分。如果元素的数量是奇数ceil它。
这只是一些巨大数据集的简化问题。这就是我到目前为止解决它的方式。
import pandas as pd
import numpy as np
df_input = pd.DataFrame({"A": [2,2,3,3,3,4,4,4,4],
"B": [2,1,1,3,2,4,2,1,3],
"C": [1,1,2,2,2,4,4,4,4]})
df_output = pd.DataFrame({"A": [2,2,3,3,3,4,4,4,4],
"B": [2,1,1,3,2,4,2,1,3],
"C": [1,1,2,2,2,4,4,4,4],
"D": [1,1,2,2,2,4,4,4,4]})
df = df_input.copy()
df.sort_values(by=['A', 'B'], inplace=True)
df['E'] = np.ceil(df['A'] / 2) # this is number of elements to sum up withing group 'A'
df['G'] = df['C'] / df['E'] # this is element to be included or not inside the sum
df['H'] = np.where(df['E'] >= df['B'], df['G'], 0)
df['D'] = df.groupby('A')['H'].transform('sum')
我希望以更整洁,更简单的方式完成这项工作......请:)