I have a dataframe which looks like this
Date Description Deposits Withdrawls Balance
0 21-Aug-2020 Cash 0.00 10612.14 53063.19
... ... ... ... ... ...
1000000 15-Nov-2155 Cheque 0.00 12345.00 55511.00
After performing this two operations
res1 = df.groupby('Date')['Withdrawls'].mean()
res2 = df.groupby(['Date', 'Description'])['Withdrawls'].mean()
I get two Series which look like this:
print(res1)
Date
2020-08-21 77189.019273
...
2155-11-15 125627.741943
Name: Withdrawls, Length: 49394, dtype: float64
and this:
print(res2)
Date Description
2020-08-21 ATM 76862.370556
Bill 44174.444545
... ...
2155-11-15 Purchase 95530.093750
RTGS 306642.666000
... ...
Name: Withdrawls, Length: 650468, dtype: float64
What I need is to combine them like this. The empty description is a result from res1
and others are results from res2
. How do I do it? (Assume that we also have series which get min and max for each grouping like res1
and res2
. For simplicity you can just assume there is no Min and Max columns)
Date Type Min Max Avg
0 21-Aug-2020 Description="Reversal" 0.00 10612.14 53063.19
... ... ... ... ... ...
1000000 15-Nov-2155 0.00 12345.00 55511.00
CodePudding user response:
You can create 2 DataFrames df11, df22
first, add column Description
, join together and sorting per multiple columns:
print (df)
Date Description Deposits Withdrawls Balance
0 21-Aug-2020 Cash 0.0 10.0 53063.19
0 21-Aug-2020 Cash 0.0 114.0 53063.19
0 21-Aug-2020 Cash 0.0 107.0 53063.19
1000000 15-Nov-2155 Cheque 0.0 12345.0 55511.00
df11 = (df.groupby(['Date', 'Description'])['Withdrawls']
.agg(['min','max','mean'])
.reset_index())
df22 = df.groupby('Date')['Withdrawls'].agg(['min','max','mean']).reset_index()
df = (pd.concat([df11, df22.reindex(df11.columns, fill_value='', axis=1)])
.sort_values(['Date','Description'], ascending=[True, False], ignore_index=True))
print (df)
Date Description min max mean
0 15-Nov-2155 Cheque 12345.0 12345.0 12345.0
1 15-Nov-2155 12345.0 12345.0 12345.0
2 21-Aug-2020 Cash 10.0 114.0 77.0
3 21-Aug-2020 10.0 114.0 77.0