python - 从数据框的列中减去子列

标签 python pandas dataframe

我有一个数据框如下:

    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"])

enter image description here


或者另一种选择,将表透视为宽格式,进行减法,然后将其转换回长格式:

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())

enter image description here

关于python - 从数据框的列中减去子列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42862763/

相关文章:

r - 如何在R中批量查询Id的数量

python - 具有灵活 dtype 的 NumPy 数组可以与 == 进行比较,但不能与 np.equal 进行比较

python - 如何在 Django 1.6 模型装置中使用某些字段而不是主键?

python - 将列值更改为 Pandas 中的列标题

python - 如何将所有以前的值放入 pandas 数据框中的列中的列表中?

python - 如何找到一个值与pandas中的多个值关联

python - 将百分位值分配给python中的一长串股票

python - 在 Python Pandas 中查找前导零的记录

python - 在 for 循环中创建一个新的顺序模型(使用 Keras)

python - Pandas 数据帧列中值的最大差异