Python 百分比差异计算

Python 百分比差异计算,python,pandas,statistics,percentage,difference,Python,Pandas,Statistics,Percentage,Difference,我想知道是否可以简化以下计算或使用替代计算: id | group | value 01 | 1 | 5 01 | 1 | 6 02 | 1 | 35 02 | 1 | 40 03 | 1 | 90 03 | 1 | 95 control | 1 | 50 control | 1 | 60 04 | 2 | 3

我想知道是否可以简化以下计算或使用替代计算:

id      | group | value
01      |   1   |   5
01      |   1   |   6
02      |   1   |   35
02      |   1   |   40
03      |   1   |   90
03      |   1   |   95
control |   1   |   50
control |   1   |   60
04      |   2   |   35
04      |   2   |   36
05      |   2   |   15
05      |   2   |   10
06      |   2   |   20
06      |   2   |   25
control |   2   |   30
control |   2   |   40
首先,计算每组所有控制的平均值:

id      | group | value_mean
control |   1   |   55
control |   2   |   35
id      | group | value_mean_percent
01      |   1   |   10
02      |   1   |   68
03      |   1   |   168
04      |   2   |   101
05      |   2   |   36
06      |   2   |   64
然后计算每个id相对于控制的平均差:

id      | group | value_mean
control |   1   |   55
control |   2   |   35
id      | group | value_mean_percent
01      |   1   |   10
02      |   1   |   68
03      |   1   |   168
04      |   2   |   101
05      |   2   |   36
06      |   2   |   64
id=1的示例 (5+6)/2*100/55=10%


是否有其他方法来解释此类数据的结果?

我认为您可以定义一个作用于数据帧的子组的函数,在该函数中,它按
id
值进行分组,计算平均值并返回按控件划分的所有值:

def func(da):
    da = da.groupby('id')['value'].mean()
    return 100*da[da.index != "control"]/da['control']
然后您只需将data.frame按
分组
,应用此功能,然后重置索引:

import pandas as pd
import numpy as np

df = pd.DataFrame({"id":np.repeat(['01','02','03','control','04','05','06','control'],2),
                  "group":np.repeat([1,2],8),
                   "value":[5,6,35,40,90,95,50,60,35,36,15,10,20,25,30,40]})

df.groupby('group').apply(func).reset_index()

    group   id  value
0   1   01  10.000000
1   1   02  68.181818
2   1   03  168.181818
3   2   04  101.428571
4   2   05  35.714286
5   2   06  64.285714

         

谢谢,我不知道我可以在熊猫中应用函数。