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