我有一个看起来像这样的 Pandas 数据框:
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)
我想按 Type
分组,并根据几个条件进行计数和求和,得到如下结果:
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
我试过以下但不完全是我需要的。请分享您可能有的任何想法。谢谢!
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)
最佳答案
如果你想创建一个函数:
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
关于python - Groupby 在 Python 中的多个条件下对多列进行求和和计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53908735/