[英]Pandas: How to subtract value from columns by rows from different dataframes
使用 Pandas 數據幀,如何減去基於“CUSIP”(充當唯一 ID)的數據幀之間列“(x$1000)”和“PRN AMT”中的差異? 我提供的數據集是一個示例,因此解決方案必須能夠應對不同的訂單。 我試過閱讀有關 dataframe.subtract() 的文檔,但不明白如何將其應用於我的具體問題。
數據框 1:
CUSIP (x$1000) PRN AMT TICKER
594918104 2765345852 2114080582 MSFT
037833100 1891440177 3058252946 AAPL
02079K305 1721936077 132543866 GOOGL
023135106 1341784239 2573051329 AMZN
數據框 2:
CUSIP (x$1000) PRN AMT TICKER
594918104 3034828140 1612323669 MSFT
037833100 2463247977 2628732382 AAPL
02079K305 2096049986 93429916 GOOGL
023135106 1581124222 118724459 AMZN
通緝output:
CUSIP (x$1000) PRN AMT TICKER
594918104 -269482288 501756913 MSFT
037833100 -571807800 429520564 AAPL
02079K305 -374113909 39113950 GOOGL
023135106 -239339983 2454326870 AMZN
這是重新創建數據框的代碼:
import pandas as pd
dataset_1 = {'CUSIP': ['594918104', '037833100', '02079K305', '023135106'], '(x$1000)': [
2765345852, 1891440177, 1721936077, 1341784239], 'PRN AMT': [2114080582, 3058252946, 132543866, 2573051329], 'TICKER': ['MSFT', 'AAPL', 'GOOGL', 'AMZN']}
dataset_2 = {'CUSIP': ['594918104', '037833100', '02079K305', '023135106'], '(x$1000)': [
3034828140, 2463247977, 2096049986, 1581124222], 'PRN AMT': [1612323669, 2628732382, 93429916, 118724459], 'TICKER': ['MSFT', 'AAPL', 'GOOGL', 'AMZN']}
df_1 = pd.DataFrame(data=dataset_1)
df_2 = pd.DataFrame(data=dataset_2)
print(f'{df_1} and {df_2}')
通過CUSIP,TICKER
創建MultiIndex
並減去DataFrame.sub
,最后DataFrame.reset_index
並通過DataFrame.reindex
更改列的順序:
df = (df_1.set_index(['CUSIP','TICKER'])
.sub(df_2.set_index(['CUSIP','TICKER']))
.reset_index()
.reindex(df_1.columns, axis=1))
print (df)
CUSIP (x$1000) PRN AMT TICKER
0 594918104 -269482288 501756913 MSFT
1 037833100 -571807800 429520564 AAPL
2 02079K305 -374113909 39113950 GOOGL
3 023135106 -239339983 2454326870 AMZN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.