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 は、買い手 1 がその月に購入した合計金額です。毎月の各購入者について、3 社の HHI を計算しようとしています。これは、購入者の 3 つの最大のやり取りからの月間合計ボリュームの割合の二乗値の合計を意味します。上記の例では、3 社の HHI は 2009-07 では 0.41、2009-08 では 0.42 になります。計算には groupby を含める必要があるように思われますが、各 groupby 要素で最大、2 番目、3 番目に大きい値を見つける方法がわかりません。助けていただければ幸いです。

4

1 に答える 1

2

Amount 列を取得して並べ替え、最初の 3 つの要素を取得するだけです。また、Amount 列を合計できるので、Amount 合計列も必要ありません。

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 に答える