这是我的熊猫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
理想情况下,我想展示我的前进方式,但坦率地说,我毫无头绪!
编辑:此外,如何处理类别是否为空白或是否符合列之一(因为最终值应与蛋白质列中的初始值相同)
答案 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