I have a data frame indexed by date
transactions_ind
Out[25]:
Ticker Transaction Number_of_units Price
Date
2012-10-11 ROG VX Equity Buy 12000 182.00000
2012-10-16 ROG VX Equity Sell -5000 184.70000
2012-11-16 ROG VX Equity Sell -5000 175.51580
2012-12-07 ROG VX Equity Buy 5000 184.90000
2012-12-11 ROG VX Equity Sell -3000 188.50000
2012-12-11 ROG VX Equity Reversal: Sell 3000 188.50000
2012-12-11 ROG VX Equity Sell -3000 188.50000
2012-12-11 ROG VX Equity Reversal: Sell 3000 188.50000
2012-12-11 ROG VX Equity Sell -3000 188.50000
2012-12-20 ROG VX Equity Sell -5000 185.80000
I want to sum over the duplicated index values (2012-12-11) but only over the column "Number_of_units".
transactions_ind
Out[25]:
Ticker Transaction Number_of_units Price
Date
2012-10-11 ROG VX Equity Buy 12000 182.00000
2012-10-16 ROG VX Equity Sell -5000 184.70000
2012-11-16 ROG VX Equity Sell -5000 175.51580
2012-12-07 ROG VX Equity Buy 5000 184.90000
2012-12-11 ROG VX Equity Sell -3000 188.50000
2012-12-20 ROG VX Equity Sell -5000 185.80000
Using
transactions_ind.groupby(transactions_ind.index).sum()
deletes the columns "Ticker" and "Transaction" since those are filled with non-numeric values. Also I would olike to know how to deal with the different strings in the "Transactions" column when I sum over the "Number_of_units" column. Hope there exists a one-liner in pandas. Thanks for your help!
You can use agg
with first
and sum
:
df = df.groupby(df.index).agg({'Ticker': 'first',
'Transaction': 'first',
'Number_of_units':sum,
'Price': 'first'})
#reorder columns
df = df[['Ticker','Transaction','Number_of_units','Price']]
print df
Ticker Transaction Number_of_units Price
Date
2012-10-11 ROG VX Equity Buy 12000 182.0000
2012-10-16 ROG VX Equity Sell -5000 184.7000
2012-11-16 ROG VX Equity Sell -5000 175.5158
2012-12-07 ROG VX Equity Buy 5000 184.9000
2012-12-11 ROG VX Equity Sell -3000 188.5000
2012-12-20 ROG VX Equity Sell -5000 185.8000
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With