2024-10-17 08:21:00 发布
网友
我有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
一种方法是使用Series.where相应地更改amount的符号,然后groupby.sum:
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:
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
一种方法是使用
Series.where
相应地更改amount
的符号,然后groupby.sum
:Idea由
1
如果ADD
和-1
如果SUBRACT
列乘以,然后聚合sum
:详细信息:
也可以通过} 为负值,通过
-1
为多个指定^{1
为所有其他值:相关问题 更多 >
编程相关推荐