平均为数据框中分组列数的一半

时间:2018-01-30 10:32:36

标签: python pandas numpy dataframe

下面我定义了两个数据帧,输入和输出。 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')

我希望以更整洁,更简单的方式完成这项工作......请:)

0 个答案:

没有答案