FOOD_ID SAMPLE_NO ELEMENT1 ELEMENT2 ELEMENT3
F110 A1 0.4 0.2 0.1
F110 A2 0.6 0.1 0.3
F110 B1 0.4 0.3 0.7
F110 B2 0.5 0.6 0.9
F110 C1 0.5 0.3 0.4
F110 C2 0.6 0.2 0.6
F110 C3 0.1 0.1 0.5
F120 B1 0.4 0.2 0.2
F120 B2 0.5 0.2 0.5
F120 B3 0.7 0.3 0.8
F120 B4 0.7 0.7 0.9
F120 B5 0.2 0.9 0.1
我的数据如上所示。我想添加列来给出食物 id 的元素 1、2、3 的平均值。如果样本 C 可用,则平均值将只是 C 样本的平均值,如果 C 样本不存在,则平均值将只是 B 样本的最新平均值。
对于食品 f110 C sample ,这就是为什么平均值将是 C sample 的平均值。对于食品 f120 C 样本不存在,这就是为什么平均值将是 B 样本 B5 的最新值。
我最终想要的数据框如下所示......
FOOD_ID ELEMENT1_AVG ELEMENT2_AVG ELEMENT3_AVG
F110 (0.5+0.6+0.1)/3=0.4 (0.3+0.2+0.1)=0.2 (0.4+0.6+0.5)=0.5
F120 0.2 0.9 0.1
需要帮助。提前致谢。
def function1(dd:pd.DataFrame):
return dd.query("SAMPLE_NO.str.contains('C')").mean() if len(dd.query("SAMPLE_NO.str.contains('C')"))>0 else dd.query("SAMPLE_NO.str.contains('B')").iloc[-1,2:]
df1.groupby('FOOD_ID').apply(function1).rename(columns=lambda ss:f'{ss}_AVG')
ELEMENT1_AVG ELEMENT2_AVG ELEMENT3_AVG
FOOD_ID
F110 0.4 0.2 0.5
F120 0.2 0.9 0.1
我是一名优秀的程序员,十分优秀!