Pandas 列根据条件合并

标签 pandas

这是我的 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

理想情况下,我想展示我是如何接近的,但是,坦率地说,我一无所知!!

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

最佳答案

使用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']]

关于Pandas 列根据条件合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63052917/

相关文章:

python - Pandas 按类别绘制数据框条形图和颜色

python - Pandas Excel合并单元格解析重命名未命名列

python - 将数据转换为分位数 bin

python - 根据另一列中的值将列添加到 Python pandas DataFrame

python - 使用堆栈函数转换 pandas 数据框

python - "Resample"根据其频率的时间戳

python - 与`sys.getsizeof`不一致

python - 特定月份的 Pandas、groupby 和求和

python - 如何匹配数据框中相反的值?

python - Python scipy/numpy/pandas 中时间序列的分层聚类?