python - 在数据框中添加一列,对现有列的不同行执行不同的操作

标签 python pandas dataframe duplicates mean

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

关于python - 在数据框中添加一列,对现有列的不同行执行不同的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59745642/

相关文章:

python - Pandas - 通过检查同一数据帧的其他行的条件来派生新列的最佳方法

python - 如何从Python中的__new__构造函数调用方法?

python逐字节读取二进制文件

python - 路径中文件夹名称的匹配模式,从匹配中排除路径的一部分?

python - 通过搜索两个数据框创建 pandas 数据框

python - Matplotlib 正在打印线图两次/多次

python - 在 pandas 数据框中生成行以弥补一列(或多列)的缺失值

python - 导出单个 iPython Jupyter Notebook 单元格输出

python - 使用 Pandas 从另一个数据帧中包含的值检测数据帧的索引

date - 根据键将 DataFrame 行替换为最新数据