I have a pandas dataframe that looks like this:
import pandas as pd
import numpy as np
data = {
"Type": ["A", "A", "B", "B", "B"],
"Project": ["X123", "X123", "X21", "L31", "L31"],
"Number": [100, 300, 100, 200, 500],
"Status": ['Y', 'Y', 'N', 'Y', 'N']
}
df = pd.DataFrame.from_dict(data)
I want to group by Type
and get count and sum with several conditions and get results as follows:
Type Total_Count Total_Number Count_Status=Y Number_Status=Y Count_Status=N Number_Status=N
A 2 400 2 400 0 0
B 5 800 1 200 2 600
I have tried following but not exactly what i need. Please share any ideas that you might have. Thanks!
df1 = pd.pivot_table(df, index = 'Type', values = 'Number', aggfunc = np.sum)
df2 = pd.pivot_table(df, index = 'Type', values = 'Project', aggfunc = 'count')
pd.concat([df1, df2], axis=1)
If you want to create a Function:
def my_agg(x):
names = {
'Total_Count': x['Type'].count(),
'Total_Number': x['Number'].sum(),
'Count_Status=Y': x[x['Status']=='Y']['Type'].count(),
'Number_Status=Y': x[x['Status']=='Y']['Number'].sum(),
'Count_Status=N': x[x['Status']=='N']['Type'].count(),
'Number_Status=N': x[x['Status']=='N']['Number'].sum()}
return pd.Series(names)
df.groupby('Type').apply(my_agg)
Total_Count Total_Number Count_Status=Y Number_Status=Y Count_Status=N Number_Status=N
Type
A 2 400 2 400 0 0
B 3 800 1 200 2 600
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