[英]How to perform operations on groups in pandas
我有這樣的數據幀:
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來獲得我需要的結果?
可能是:
>>> 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.