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
谢谢,我不知道我可以在熊猫中应用函数。