SQL groupby与pandas中的分区

时间:2018-01-22 02:38:43

标签: python pandas dataframe group-by pandas-groupby

现在我有这样一个SQL语句,我想知道如何在Pandas中编写它,也许使用groupBy并应用?:

提供一个包含A,B列

的表格
 Select A, sum(B) / sum(A)
 from table
 group by A;

我现在在

def func(group):
   x = group['B']
   y = group['A']
   return x.sum() / y.sum()

table.groupby('A').apply(func)

这将生成一个没有A列的数字序列,用于分组on。我想将一个数据帧作为输出,A也作为一个单独的列,就像我写的SQL语句一样。谁能帮我回答这个问题?

谢谢!

2 个答案:

答案 0 :(得分:3)

这是你想要的吗?

df=pd.DataFrame({'A':[1,1,3,4],'B':[2,3,4,5]})

def func(group):
   x = group['B']
   y = group['A']
   return x.sum() / y.sum()

df.groupby('A').apply(func).reset_index()


Out[934]: 
   A         0
0  1  2.500000
1  3  1.333333
2  4  1.250000

答案 1 :(得分:3)

这里不需要apply。对于groupby,计算总和并直接划分将会快得多,因为pandas会对这些操作进行矢量化。

借用@Wen的设置,我就是这样做的 -

v = df.groupby('A')[['A', 'B']].sum()
v['B'] /= v['A']
del v['A']

          B
A          
1  2.500000
3  1.333333
4  1.250000