python - 基于列在数据框中添加或减去两列?

标签 python pandas dataframe

我的 df 具有三列名称、数量和类型。 我正在尝试根据类型向用户添加或减去值

这是我的样本 df

    name    amount  type                  
0   John    10      ADD
1   John    20      ADD
2   John    50      ADD
3   John    50      SUBRACT
4   Adam    15      ADD
5   Adam    25      ADD
6   Adam    5       ADD
7   Adam    30      SUBRACT
8   Mary    100     ADD

我的结果 df

    name    amount                    
0   John    30      
1   Adam    15      
2   Mary    100   

最佳答案

如果 ADD 则想法乘以 1,如果 SUBRACT 列则乘以 -1 然后聚合 总和:

df1 = (df['amount'].mul(df['type'].map({'ADD':1, 'SUBRACT':-1}))
                   .groupby(df['name'], sort=False)
                   .sum()
                   .reset_index(name='amount'))
print (df1)
   name  amount
0  John      30
1  Adam      15
2  Mary     100

详细信息:

print (df['type'].map({'ADD':1, 'SUBRACT':-1}))
0    1
1    1
2    1
3   -1
4    1
5    1
6    1
7   -1
8    1
Name: type, dtype: int64

也可以使用 numpy.where 仅指定负值对于多个 -1 和所有另一个通过 1:

df1 = (df['amount'].mul(np.where(df['type'].eq('SUBRACT'), -1, 1))
                   .groupby(df['name'], sort=False)
                   .sum()
                   .reset_index(name='amount'))
print (df1)

   name  amount
0  John      30
1  Adam      15
2  Mary     100

关于python - 基于列在数据框中添加或减去两列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60847007/

相关文章:

python - matplotlib - 控制线条集合的 capstyle/大量线条

python - 基于标签扩展numpy数组

python - 根据多个条件创建列

python - reshape DataFrame 列

python - 获取每个标签的最小最大和平均观看次数

python - 如何进行多个查询?

python - 使用 Pandas Dataframe 和 Plotly 绘制包含 2 个数据系列的条形图

python - 返回变量以及渲染模板

python - 在特定时间范围内选择观察 datetime64[ns] 类型

python - NumPy:如何左连接有重复的数组