[英]Multiply two columns in a pandas MultiIndex dataframe
我從未使用過 multiIndex pandas 數據幀,而 Python API 用於我使用的財務程序 CalcBench,當我鍵入以下代碼時返回一個:
dataItems = ["ROE", "StockholdersEquity", "SharesOutstandingEndOfPeriod", "EndOfPeriodStockPrice"]
data = cb.normalized_data(tickers, dataItems, start_year=2021, end_year=2021, period_type='annual')
如果我嘗試通過鍵入data.info()
來探索我的 dataframe,我得到:
<class 'pandas.core.frame.DataFrame'>
PeriodIndex: 1 entries, 2021 to 2021
Freq: A-DEC
Columns: 1800 entries, ('EndOfPeriodStockPrice', 'A') to ('StockholdersEquity', 'ZTS')
dtypes: float64(1800)
輸入data.columns()
給我:
MultiIndex([('EndOfPeriodStockPrice', 'A'),
('EndOfPeriodStockPrice', 'AAL'),
('EndOfPeriodStockPrice', 'AAP'),
('EndOfPeriodStockPrice', 'AAPL'),
('EndOfPeriodStockPrice', 'ABBV'),
('EndOfPeriodStockPrice', 'ABC'),
('EndOfPeriodStockPrice', 'ABT'),
('EndOfPeriodStockPrice', 'ACN'),
('EndOfPeriodStockPrice', 'ADBE'),
('EndOfPeriodStockPrice', 'ADI'),
...
( 'StockholdersEquity', 'WYNN'),
( 'StockholdersEquity', 'XEL'),
( 'StockholdersEquity', 'XOM'),
( 'StockholdersEquity', 'XRAY'),
( 'StockholdersEquity', 'XYL'),
( 'StockholdersEquity', 'YUM'),
( 'StockholdersEquity', 'ZBH'),
( 'StockholdersEquity', 'ZBRA'),
( 'StockholdersEquity', 'ZION'),
( 'StockholdersEquity', 'ZTS')],
names=['metric', 'ticker'], length=1800)
我想通過將EndofPeriodStockPrice
和SharesOutstandingEndOfPeriod
的相應條目相乘,在 dataframe 中為 2021 年的每家公司創建一個新指標MarketCapAtEndOfPeriod
。
我為此所做的努力沒有任何結果,搜索 StackOverflow 也沒有幫助我解決我的問題。 松散地說,我想寫這樣的東西:
data["MarketCapAtEndOfPeriod"] = data["EndofPeriodStockPrice"] * data["SharesOutstandingEndOfPeriod"]
market_cap = data.EndOfPeriodStockPrice * data.SharesOutstandingEndOfPeriod
market_cap_df = pd.concat(
{"MarketCap": market_cap},
names=["metric"],
axis=1,
)
data = data.join(market_cap_df)
將
EndofPeriodStockPrice
和SharesOutstandingEndOfPeriod
的相應條目相乘
使用DataFrame.xs
通過指定 label 和可選的軸/水平來訪問 MultiIndex 橫截面。
level=0
並為列指定axis=1
。MultiIndex.from_product
之前使用 MultiIndex.from_product 重建 MultiIndex。key1 = 'EndofPeriodStockPrice'
key2 = 'SharesOutstandingEndOfPeriod'
new = 'MarketCapAtEndOfPeriod'
prod = data.xs(key1, axis=1) * data.xs(key2, axis=1)
prod.columns = pd.MultiIndex.from_product([[new], [key1, key2]])
# MultiIndex([('MarketCapAtEndOfPeriod', 'EndofPeriodStockPrice'),
# ('MarketCapAtEndOfPeriod', 'SharesOutstandingEndOfPeriod')])
df = df.join(prod)
如果假設您想划分相應的AAPL
和ABC
條目,則它們位於第二列級別,因此同時指定axis=1
和level=1
:
data.xs('AAPL', axis=1, level=1) / data.xs('ABC', axis=1, level=1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.