熊猫列根据条件合并

时间:2020-07-23 11:14:52

标签: pandas

这是我的熊猫df:

Id  Protein A_Egg   B_Meat  C_Milk  Category
A   10        10      20       0    egg
B   20        10       0      10    milk
C   20        10      10      10    meat
D   25        20      10       0    egg

我希望根据“类别”将蛋白质栏与其他栏合并

我的输出是

Id  Protein_final
A      20         
B      30         
C      30
D      45

理想情况下,我想展示我的前进方式,但坦率地说,我毫无头绪!

编辑:此外,如何处理类别是否为空白或是否符合列之一(因为最终值应与蛋白质列中的初始值相同)

2 个答案:

答案 0 :(得分:2)

使用DataFrame.lookup进行一些预处理,删除_之前的列名称中的值,并将其小写,最后添加到列中:

arr = df.rename(columns=lambda x: x.split('_')[-1].lower()).lookup(df.index, df['Category'])

df['Protein'] += arr
print (df)
  Id  Protein  A_Egg  B_Meat  C_Milk Category
0  A       20     10      20       0      egg
1  B       30     10       0      10     milk
2  C       30     10      10      10     meat
3  D       45     20      10       0      egg

如果最后只需要2列:

df = df[['Id','Protein']]

答案 1 :(得分:1)

您可以melt数据框,并过滤类别等于变量列的行,并对最后的列求和:

(
    df
     .melt(["Id", "Protein", "Category"])
     .assign(variable=lambda x: x.variable.str[2:].str.lower(),
             Protein_final=lambda x: x.Protein + x.value)
     .query("Category == variable")
     .filter(["Id", "Protein_final"])
)

    Id  Protein_final
  0 A   20
  3 D   45
  6 C   30
  9 B   30