如何使用Pandas计算Python中的组和

如何使用Pandas计算Python中的组和,python,excel,pandas,Python,Excel,Pandas,我有一个数据框,负责使用pandas group函数: 我想让它自动化,而不必在Excel中进行这样的操作: 是的,使用特伦顿链接,加上一些其他东西,你可以实现你想要的。你可能只是懒得做更多的研究 d = [{'group': 1, 'letters': 'a', 'counts': 20, 'sum1': 3, 'sum2': 2}, {'group': 1, 'letters': 'b', 'counts': 40, 'sum1': 2, 'sum2': 3}, {'gr

我有一个数据框,负责使用pandas group函数:

我想让它自动化,而不必在Excel中进行这样的操作:


是的,使用特伦顿链接,加上一些其他东西,你可以实现你想要的。你可能只是懒得做更多的研究

d = [{'group': 1, 'letters': 'a', 'counts': 20, 'sum1': 3, 'sum2': 2},
    {'group': 1, 'letters': 'b', 'counts': 40, 'sum1': 2, 'sum2': 3},
    {'group': 2, 'letters': 'a', 'counts': 60, 'sum1': 3, 'sum2': 5},
    {'group': 2, 'letters': 'b', 'counts': 90, 'sum1': 5, 'sum2': 4}
]
df = pd.DataFrame(d, columns=['group', 'letters', 'counts', 'sum1', 'sum2']) # this is your original df
#print(df)

df2 = df.groupby(by="group").sum() # this will give the summary you want
#print(df2)

df3 = pd.merge(df, df2, how='inner', on='group') # merge 2 of them
print(df3)

df3['avg_counts'] = df3['counts_x'] / df3['counts_y'] # add new calculated columns 
df3['avg_sum1'] = df3['sum1_x'] / df3['sum1_y']
df3['avg_sum2'] = df3['sum2_x'] / df3['sum2_y']
print(df3.head())

#if needed remove the columns you dont need
结果

   group letters  counts_x  sum1_x  sum2_x  counts_y  sum1_y  sum2_y  avg_counts  avg_sum1  avg_sum2
0      1       a        20       3       2        60       5       5   0.333333      0.600  0.400000
1      1       b        40       2       3        60       5       5   0.666667      0.400  0.600000
2      2       a        60       3       5       150       8       9   0.400000      0.375  0.555556
3      2       b        90       5       4       150       8       9   0.600000      0.625  0.444444

不,我试图找到每组的总数,求和1除以总数。和和和2一样,我不知道在熊猫中是否有不进入excel的方法。我有大约200个小组。你想达到什么目标?你如何获得1%的收入?您可以使用groupby('group')获取df并附加它,然后排序。。。但是我建议在只用于报告的临时df上执行此操作,因此您可以保持数据完整+10可能只是懒得做更多的研究。谢谢+10:)顺便说一句,Trenton,当我想打印(df3)-->有许多列时,打印结果会将其缩短(不显示所有列)。如何显示完整的列*我也是python新手..
组字母计数\u x sum1\u x。。。sum2_y avg_counts avg_sum1 avg_sum2
它表明。。。如果有太多的列无法打印
pd.set\u选项('display.max\u columns',700)
pd.set\u选项('display.max\u rows',400)
pd.set\u选项('display.min\u rows',10)
pd.set\u选项('display.expand\u frame\u repr',True)
d = [{'group': 1, 'letters': 'a', 'counts': 20, 'sum1': 3, 'sum2': 2},
    {'group': 1, 'letters': 'b', 'counts': 40, 'sum1': 2, 'sum2': 3},
    {'group': 2, 'letters': 'a', 'counts': 60, 'sum1': 3, 'sum2': 5},
    {'group': 2, 'letters': 'b', 'counts': 90, 'sum1': 5, 'sum2': 4}
]
df = pd.DataFrame(d, columns=['group', 'letters', 'counts', 'sum1', 'sum2']) # this is your original df
#print(df)

df2 = df.groupby(by="group").sum() # this will give the summary you want
#print(df2)

df3 = pd.merge(df, df2, how='inner', on='group') # merge 2 of them
print(df3)

df3['avg_counts'] = df3['counts_x'] / df3['counts_y'] # add new calculated columns 
df3['avg_sum1'] = df3['sum1_x'] / df3['sum1_y']
df3['avg_sum2'] = df3['sum2_x'] / df3['sum2_y']
print(df3.head())

#if needed remove the columns you dont need
   group letters  counts_x  sum1_x  sum2_x  counts_y  sum1_y  sum2_y  avg_counts  avg_sum1  avg_sum2
0      1       a        20       3       2        60       5       5   0.333333      0.600  0.400000
1      1       b        40       2       3        60       5       5   0.666667      0.400  0.600000
2      2       a        60       3       5       150       8       9   0.400000      0.375  0.555556
3      2       b        90       5       4       150       8       9   0.600000      0.625  0.444444