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来得到我需要的结果?