如何在 pandas 中对分组执行操作

3

I have a dataframe like this:

   ID  A   B   Area
0  1   A1  B1  1.0
1  2   A1  B2  2.0
2  3   A1  B1  0.5
3  4   A1  B2  1.0
4  5   A2  B3  2.0
5  6   A2  B4  6.0

我希望你能够理解以下内容:

我想要得到的是这个:

   ID  A   B   Area  B as % of A
0  1   A1  B1  1.0   0.333
1  2   A1  B2  2.0   0.666
2  3   A1  B1  0.5   0.333
3  4   A1  B2  1.0   0.666
4  5   A2  B3  2.0   0.25
5  6   A2  B4  6.0   0.75

目标是添加一个新列,该列显示每个房间类型B占据的每个楼层A面积的比例(请注意,这是按照房间类型计算的,因此输出列中的值应对于A和B的每个唯一组合相同)。
到目前为止我所拥有的内容是:
>>> grouped = df.groupby(['A','B'])  
>>> area_proportion = lambda x: (x['Area'] / x['Area'].sum())
>>> grouped.transform(area_proportion)

但是这似乎将lambda函数视为原始数据框的索引(我认为它应该是按组),因为它只返回:
Out[142]: 
  ID  Area
0  1   1.0
1  2   2.0
2  3   0.5
3  4   1.0
4  5   2.0
5  6   6.0

我显然理解错了什么或者文档中缺少重要部分。我应该如何使用groupby来得到我需要的结果?
1个回答

3
可能:
>>> aggr = lambda df, key, col: df.groupby(key)[col].transform('sum')
>>> df['B as % of A'] = aggr(df, ('A', 'B'), 'Area') / aggr(df, 'A', 'Area')
>>> df
   ID   A   B  Area  B as % of A
0   1  A1  B1   1.0       0.3333
1   2  A1  B2   2.0       0.6667
2   3  A1  B1   0.5       0.3333
3   4  A1  B2   1.0       0.6667
4   5  A2  B3   2.0       0.2500
5   6  A2  B4   6.0       0.7500

哦,我觉得我被重复条目搞混了,它们应该被视为等效而不是单独的条目。 - EdChum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接