私はこのように見える2つのdfを持っています:
Symbol Sector Sub-industry Company Weight SectorSymbol
Ticker
MMM Industrials Conglomerates MCompany 0.602676 XLI
ABT Health Care Equipment Abbott Lab 0.401900 XLV
ABBV Health Care Pharmaceuticals AbbVie Inc 0.550174 XLV
ACN Info Tech Consulting Accenture 0.370650 XLK
ATVI Info Tech Entertainment Activision 0.192788 XLK
そして
MMM ABT ABBV ACN ATVI
Date
2017-01-03 1.4 2.3 4.5 2.1 .7
2017-01-04 .8 3.1 5.2 1.8 1.2
2017-01-05 2.4 2.1 5.5 1.6 1.4
最初のdfで定義した「セクターシンボル」値を2番目のdf(MMM、ABT、ABBVなど)のティッカーに適用しようとしています。これにより、2番目のdfはシンボルMMMをXLIの一部として認識します。 XLVとしてのABTなど。
df1 = pd.DataFrame(
{'Sector': ['Industrials'] + ['Health Care']*2 + ['Info Tech']*2,
'Sub-industry': ['Conglomerates', 'Equipment', 'Pharmaceuticals', 'Consulting', 'Entertainment'],
'Company': ['MCompany', 'Abbott Lab', 'AbbVie Inc', 'Accenture', 'Activision'],
'Weight': [.602676, .4019, .550174, .37065, .192788],
'SectorSymbol': ['XLI', 'XLV', 'XLV', 'XLK', 'XLK']},
index=pd.Index(['MMM', 'ABT', 'ABBV', 'ACN', 'ATVI'], name='Symbol Ticker')
)[['Sector', 'Sub-industry', 'Company', 'Weight', 'SectorSymbol']]
df2 = pd.DataFrame({'MMM': [1.4, .8, 2.4],
'ABT': [2.3, 3.1, 2.1],
'ABBV': [4.5, 5.2, 5.5],
'ACN': [2.1, 1.8, 1.6],
'ATVI': [.7, 1.2, 1.4]},
index=pd.Index(['2017-01-03', '2017-01-04', '2017-01-05'], name='Date')
)[['MMM', 'ABT', 'ABBV', 'ACN', 'ATVI']]
期待される出力には、ティッカーに割り当てられた数値が含まれます。プログラムは、そのティッカーを「XLI、XLV、XLK」の一部として認識するため、df2でMMMの値を検索すると、プログラムに表示されます。過剰な動き#とその家族(XLI)
1)シンボルをセクターシンボルにマッピングする辞書を作成します。
2)リスト内包表記を使用して、関連するシンボルのすべてのセクターシンボルの順序付けられたマッピングを取得します。get
辞書で使用して、マップされていない証券を許可します(以下のコメントを参照)。
3)groupby
セクター記号に使用し、平均を取ります。
d = df1['SectorSymbol'].to_dict()
sector_symbols = [d.get(symbol) for symbol in df2]
>>> df2.groupby(sector_symbols, axis=1).mean()
XLI XLK XLV
Date
2017-01-03 1.4 1.4 3.40
2017-01-04 0.8 1.5 4.15
2017-01-05 2.4 1.5 3.80
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加