Pandas 使用group by划分两列

Pandas 使用group by划分两列,pandas,group-by,Pandas,Group By,我想计算2列的除法&在dataframe中创建一列。使用了以下代码: def divide_two_cols(df_sub): return df_sub['A'].sum() / float(df_sub['B'].sum()) Combined_Relevant["Ratio"]=Combined_Relevant.groupby(["Date",'Countries']).apply(divide_two_cols) 然而,这给了我错误。有人能帮我纠正代码吗?示例: Combi

我想计算2列的除法&在dataframe中创建一列。使用了以下代码:

def divide_two_cols(df_sub):

  return df_sub['A'].sum() / float(df_sub['B'].sum())


Combined_Relevant["Ratio"]=Combined_Relevant.groupby(["Date",'Countries']).apply(divide_two_cols)
然而,这给了我错误。有人能帮我纠正代码吗?

示例:

Combined_Relevant = pd.DataFrame({
         'Date':['2019-01-01'] * 6,
         'Countries':list('aaabbb'),
         'A':[1,5,4,2,5,8],
         'B':[7,8,9,4,2,3],
})
sum
一起用于与原始数据帧大小相同的系列:

g = Combined_Relevant.groupby(["Date",'Countries'])
Combined_Relevant["Ratio"] = g['A'].transform('sum') / g['B'].transform('sum')
print (Combined_Relevant)
         Date Countries  A  B     Ratio
0  2019-01-01         a  1  7  0.416667
1  2019-01-01         a  5  8  0.416667
2  2019-01-01         a  4  9  0.416667
3  2019-01-01         b  2  4  1.666667
4  2019-01-01         b  5  2  1.666667
5  2019-01-01         b  8  3  1.666667
您的解决方案使用
重命名
和:

def divide_two_cols(df_sub):
  return df_sub['A'].sum() / float(df_sub['B'].sum())

s = Combined_Relevant.groupby(["Date",'Countries']).apply(divide_two_cols).rename('Ratio')
Combined_Relevant1=Combined_Relevant.join(s, on=['Date','Countries'])
print (Combined_Relevant1)
         Date Countries  A  B     Ratio
0  2019-01-01         a  1  7  0.416667
1  2019-01-01         a  5  8  0.416667
2  2019-01-01         a  4  9  0.416667
3  2019-01-01         b  2  4  1.666667
4  2019-01-01         b  5  2  1.666667
5  2019-01-01         b  8  3  1.666667