我有一个数据框如下:
name tag price
0 x1 tweak1 1.1
1 x1 tweak2 1.2
2 x1 base 1.0
3 x2 tweak1 2.1
4 x2 tweak2 2.2
5 x2 base 2.0
我想从价格列中减去基本价格并创建一个新列,如下所示:
name tag price sensitivity
0 x1 tweak1 1.1 0.1
1 x1 tweak2 1.2 0.2
2 x1 base 1.0 0.0
3 x2 tweak1 1.3 -0.7
4 x2 tweak2 2.4 0.4
5 x2 base 2.0 0.0
并最终删除带有标签基的行以获取
name tag price sensitivity
0 x1 tweak1 1.1 0.1
1 x1 tweak2 1.2 0.2
3 x2 tweak1 1.3 -0.7
4 x2 tweak2 2.4 0.4
在 pandas 中执行此操作的最佳方法是什么?
最佳答案
你可以试试这个:
(df.groupby('name', group_keys=False)
.apply(lambda g: g.assign(sensitivity = g.price - g.price[g.tag == "base"].values))
[lambda x: x.tag != "base"])
或者另一种选择,将表透视为宽格式,进行减法,然后将其转换回长格式:
wide_df = df.pivot_table(['price'], 'name', 'tag')
(wide_df.sub(wide_df[('price', 'base')], axis=0)
.drop(('price', 'base'), 1).stack(level=1)
.reset_index())
关于python - 从数据框的列中减去子列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42862763/