现在我有这样一个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语句一样。谁能帮我回答这个问题?
谢谢!
答案 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