在一个数据框中根据列添加或细分两列?

2024-10-17 08:21:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有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   

Tags: 用户name名称add类型dftype样品
2条回答

一种方法是使用Series.where相应地更改amount的符号,然后groupby.sum

df.amount.where(df.type.eq('ADD'), -df.amount).groupby(df.name).sum().reset_index()

   name  amount
0  Adam      15
1  John      30
2  Mary     100

Idea由1如果ADD-1如果SUBRACT列乘以,然后聚合sum

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

也可以通过-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

相关问题 更多 >