根据组中其他值的平均值创建新列

我试图通过排除焦点公司来计算其他值的平均值。我知道这有点复杂,但让我解释一下:

例如,假设以下代码是我的数据:

d = {'col1': ["A", "A", "A", "B", "B", "B", "c", "c","c", "d", "d", "d", "e", "e", "e"], 
     'col2': [2015, 2016, 2017, 2015, 2016, 2017, 2015, 2016, 2017, 2015, 2016, 2017, 2015, 2016, 2017], 
     'col3': [10, 20, 25, 10, 12, 14, 8, 9, 10, 50, 60, 70, 40, 50, 60],
     'group':[10, 10, 10, 10, 10, 10, 10, 10, 10, 20, 20, 20, 20, 20,20]} 
df = pd.DataFrame(d)

通过考虑 df.group,我想获得 (B+C) 的 2015 年平均值并将其添加到 A.2016 的新列中。因此,我们需要通过排除焦点项目来获取上一年的 df.group 平均值。

结果应与此相对应:

d = {'col1': ["A", "A", "A", "B", "B", "B", "c", "c", "c", "d", "d", "d", "e", "e", "e"], 
     'col2': [2015, 2016, 2017, 2015, 2016, 2017, 2015, 2016, 2017, 2015, 2016, 2017, 2015, 2016, 2017], 
     'col3': [10, 20, 25, 10, 12, 14, 8, 9, 10, 50, 60, 70, 40, 50, 60],
     'group':[10, 10, 10, 10, 10, 10, 10, 10, 10, 20, 20, 20, 20, 20,20],  
     'operation':['0', '(B2015+C2015)/2', '(B2016+C2016)/2', '0', '(A2015+C2015)/2', '(A2016+C2016)/2', '0', '(A2015+B2015)/2', '(A2016+B2016)/2',"0", "E2015", "E2016", "0","D2015", "D2016" ], 
     'mean': [nan, 9, 10.5, nan, 9, 14.5, nan, 10, 16, nan, 40, 50, nan, 50, 60]}
output = pd.DataFrame(d)

>>> output 
   col1  col2  col3  group        operation  mean
0     A  2015    10     10              nan   0.0
1     A  2016    20     10  (B2015+C2015)/2   9.0
2     A  2017    25     10  (B2016+C2016)/2  10.5
3     B  2015    10     10                0   0.0
4     B  2016    12     10  (A2015+C2015)/2   9.0
5     B  2017    14     10  (A2016+C2016)/2  14.5
6     c  2015     8     10                0   0.0
7     c  2016     9     10  (A2015+B2015)/2  10.0
8     c  2017    10     10  (A2016+B2016)/2  16.0
9     d  2015    50     20                0   0.0
10    d  2016    60     20            E2015  40.0
11    d  2017    70     20            E2016  50.0
12    e  2015    40     20                0   0.0
13    e  2016    50     20            D2015  50.0
14    e  2017    60     20            D2016  60.0
不特别
  1. 使用 double 计算每组内所有其他值的平均值groupby
  • sum组内的所有值
  • 减去当前(焦点)值
  • 除以组中的项目数减一
  1. shift-ed 方法分配给新列:
means = df.groupby("group").apply(lambda x: x.groupby("col2")["col3"].transform("sum").sub(x["col3"]).div(len(x["col1"].unique())-1)).droplevel(0)

df["mean"] = means.shift().where(df["col1"].eq(df["col1"].shift()),0)

>>> df
   col1  col2  col3  group  mean
0     A  2015    10     10   0.0
1     A  2016    20     10   9.0
2     A  2017    25     10  10.5
3     B  2015    10     10   0.0
4     B  2016    12     10   9.0
5     B  2017    14     10  14.5
6     c  2015     8     10   0.0
7     c  2016     9     10  10.0
8     c  2017    10     10  16.0
9     d  2015    50     20   0.0
10    d  2016    60     20  40.0
11    d  2017    70     20  50.0
12    e  2015    40     20   0.0
13    e  2016    50     20  50.0
14    e  2017    60     20  60.0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何根据 CSV 中的其他列值访问列值并找到它的平均值

根据数据框中其他列中的分组值计算列的平均值

根据其他列中的值计算Google文档中的平均值

根据其他两个列创建新列,但在两个列中均观察到平均值

如何根据其他列的平均值创建多列

根据另一列中的其他 ID 计算 R 中列的平均值

根据 Google 表格中的其他列查找平均值的计算脚本

根据熊猫数据框中的其他列获取变量的平均值

如何根据pandas中的组找到列的平均值

计算月份的平均值并替换其他列的值

如何基于熊猫中其他列的条件对列的某些值求平均值

根据其他列中的值创建新列

根据其他列中的NA值创建新列

根据其他列中的值创建新列

在熊猫中,如何根据另一列的平均值创建具有等级的新列

在 R 中,如何根据其他列的值从其他列的列标题创建新列

将列的平均值等于100,并按比例转换列中的其他值(Pandas Python)

唯一组的其他单元格中的平均值

按年份分组和其他列,并根据特定条件的熊猫计算平均值

Python-对列表中的相似值求平均值,并使用平均值创建新列表

根据两个条件求平均值;根据这些平均值创建列

计算新列作为其他列熊猫的平均值

根据组中其他列中至少一个变量的出现创建新列

Python Pandas:创建累积平均值,同时按其他列分组

R使用其他表的多个列的平均值创建表

列的平均值,条件是其他列的前x%

在 MATLAB 中用其他值(平均值)替换 NaN

如何根据熊猫的多种条件从一组列中得出平均值?

蟒蛇。熊猫 CSV。用其他列值计算平均值