簡體   English   中英

如何在pandas中對組執行操作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM