2

所以我有一个 Pandas DataFrame,其面板数据包含每月买卖双方之间的互动:

       Buyer       Seller       Month            Amount      Amounttotal 
0      Buyer1      Seller1 2009-07-31 00:00:00   10             255
1      Buyer1      Seller2 2009-07-31 00:00:00   15             255
2      Buyer1      Seller3 2009-07-31 00:00:00   120            255
3      Buyer1      Seller4 2009-07-31 00:00:00   110            255 
4      Buyer1      Seller1 2009-08-31 00:00:00   5              427
5      Buyer1      Seller2 2009-08-31 00:00:00   12             427
6      Buyer1      Seller3 2009-08-31 00:00:00   20             427
7      Buyer1      Seller4 2009-08-31 00:00:00   180            427
8      Buyer1      Seller5 2009-08-31 00:00:00   210            427

我有多个卖家的数据,例如Buyer1、Buyer2、Buyer3 等。Amounttotal 是buyer1 在当月购买的总金额。我正在计算,对于每个月的每个买家,它是 3-firm HHI,这意味着买家的三个最大互动中每月总交易量百分比的平方值之和。在上面的示例中,2009-07 年的 3 家公司 HHI 为 0.41,2009-08 年为 0.42。在我看来,计算必须涉及 groupby,但是我很难弄清楚如何在每个 groupby 元素中找到最大、第二大和第三大的值。非常感谢您的帮助!

4

1 回答 1

2

只需取 Amount 列,对其进行排序,然后取前 3 个元素。而且您甚至不需要总金额列,因为您可以对金额列求和。

def compute_hhi(buyer_month):
    total = float(buyer_month['Amount'].sum())
    top_3_amts = buyer_month['Amount'].order(ascending = False)[0:3]
    hhi_elements = [(value/total)**2 for value in top_3_amts]
    hhi = sum(hhi_elements)
    return hhi

grouped = df.groupby(['Buyer','Month'])
hhis = grouped.apply(compute_hhi)
于 2014-04-17T19:58:00.333 回答