簡體   English   中英

根據另一個數據框的值對數據框條目進行分組

[英]Group Dataframe entries based on values of another dataframe

這在財務應用程序中是很常見的事情,但是我不太了解如何有效地做到這一點。 假設我有一個如下所示的返回數據框:

  IBM INTC MSFT
1 0.1  0.2  0.3
2 -0.5 0.1 -0.1
3 -0.1 0.2  0.3

以及另一個基於其他變量(例如動量,收益...)形成的指數數據框

  IBM INTC MSFT
1   1   1    2
2   1   2    1
3   2   1    1

因此,對於第1行,我將IBM和INTC分組為第1組,將MSFT分組為第2組。類似地,在第2行中,我將IBM分組為第1組,而將MSFT和INTC分組為第2組。作為不同群體的平均回報。

我嘗試使用groupby,但是groupby似乎僅在一個數據幀內工作並且基於列。 我應該如何構造數據結構以利用groupby? 我從文檔中看到,groupby函數的第一個參數實際上可以是映射函數。 不過,我找不到任何示例。

我更喜歡使用堆積的記錄(這樣我們就不必為每一行都煩惱groupby)。 基本上,您需要執行兩個groupby,首先是timestamp index (在這種情況下1, 2, 3這里是整數索引1, 2, 3 ),然后是另一個基於您的參考變量的內部groupby,例如momentum

import pandas as pd
import numpy as np

# your data
# ==================================================
print(df1)


   IBM  INTC  MSFT
1  0.1   0.2   0.3
2 -0.5   0.1  -0.1
3 -0.1   0.2   0.3

print(df2)

   IBM  INTC  MSFT
1    1     1     2
2    1     2     1
3    2     1     1


df = pd.DataFrame()
df['return'] = df1.stack()
df['ref'] = df2.stack()

print(df)

        return  ref
1 IBM      0.1    1
  INTC     0.2    1
  MSFT     0.3    2
2 IBM     -0.5    1
  INTC     0.1    2
  MSFT    -0.1    1
3 IBM     -0.1    2
  INTC     0.2    1
  MSFT     0.3    1

# processing
# ==================================================

df.groupby(level=0).apply(lambda g: g.groupby('ref').agg(np.mean))

       return
  ref        
1 1      0.15
  2      0.30
2 1     -0.30
  2      0.10
3 1      0.25
  2     -0.10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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