I have a pandas dataframe df that has entries for account such that Person Name, Account id have credit and debit entries, for example
date Name transaction-type tran
2013-03-05 john Doe credit 10
2013-05-05 john Doe debit 20
2012-06-01 jane Doe credit 50
I wanted to group the transactions by date, name and transaction-type and aggregate the tran?. How could I do this? I was hoping to be able to do a reduce(numpy.subtract) on the tran column but I am not really sure on the correct syntax for Pandas.
IIUC, you simply want .groupby
and then .sum()
:
>>> df
date Name transaction-type tran
0 2013-03-05 00:00:00 john Doe credit 10
1 2013-05-05 00:00:00 john Doe debit 20
2 2012-06-01 00:00:00 jane Doe credit 50
3 2012-06-01 00:00:00 jane Doe credit 22
4 2012-06-02 00:00:00 jane Doe credit 75
>>> df.groupby(["date", "Name", "transaction-type"]).sum()
tran
date Name transaction-type
2012-06-01 jane Doe credit 72
2012-06-02 jane Doe credit 75
2013-03-05 john Doe credit 10
2013-05-05 john Doe debit 20
See the section on groupby aggregation in the docs.
If you want the total signed value, you could get that too:
>>> df["tran"][df["transaction-type"] == "debit"] *= -1
>>> df.groupby(["date", "Name"]).sum()
tran
date Name
2012-06-01 jane Doe 72
2012-06-02 jane Doe 75
2013-03-05 john Doe 10
2013-05-05 john Doe -20
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.