我有兩個 DataFrames df1 (mxn) 和df2 (mx1) 作為時間序列,我想計算df1 和之間的每一列的差異,df2 看起來像df3.
import pandas as pd
df1 = pd.DataFrame({
'Date':['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'],
'01K W':[1.2, 0.4, 0.2, -0.4],
'02K W':[3.5, 3.2, 'nan', 'nan'],
'03K W':[-1, -2.3, 0.3, 2.4],
'04K W':[1.5, 2.6, 3.2, 4.2]})
df2 = pd.DataFrame({
'Date':['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'],
'K W':[1, 1.5, 1.2, 0.8]})
df3 = pd.DataFrame({
'Date':['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'],
'01K W':[0.2, 1.1, 1, 1.2],
'02K W':[2.5, 1.7, 'nan', 'nan'],
'03K W':[2, 3.8, 0.9, 1.6],
'04K W':[0.5, 1.1, 2, 3.4]})
有沒有一種簡單的方法可以明智地構建差異列?
uj5u.com熱心網友回復:
您可以設定Date為索引,并使用.sub方法:
df1.set_index('Date').sub(df2.set_index('Date')['K W'], axis='rows')
輸出:
01K W 02K W 03K W 04K W
Date
2021-01-01 0.2 2.5 -2.0 0.5
2021-01-02 -1.1 1.7 -3.8 1.1
2021-01-03 -1.0 NaN -0.9 2.0
2021-01-04 -1.2 NaN 1.6 3.4
注意:您可能需要添加astype(float)afterset_index('Date')以更正您的資料型別。
uj5u.com熱心網友回復:
首先,您需要使用數值,而不是字串。
看起來您的“日期”欄位代表您的索引。Pandas 系列可以根據它們的共享索引按元素添加/減去,因此值得將它們稱為索引。然后您可以簡單地遍歷您的 df1 列以將 df2 應用于每個列。
from numpy import nan
import pandas as pd
df1 = pd.DataFrame({
'Date':['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'],
'01K W':[1.2, 0.4, 0.2, -0.4],
'02K W':[3.5, 3.2, nan, nan],
'03K W':[-1, -2.3, 0.3, 2.4],
'04K W':[1.5, 2.6, 3.2, 4.2]})
df2 = pd.DataFrame({
'Date':['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'],
'K W':[1, 1.5, 1.2, 0.8]})
df1 = df1.set_index('Date')
df2 = df2.set_index('Date')
df3 = df1.copy()
for c in df1.columns:
df3[c] = df1[c] - df2['K W']
df3
產量:
01K W 02K W 03K W 04K W
Date
2021-01-01 0.2 2.5 -2.0 0.5
2021-01-02 -1.1 1.7 -3.8 1.1
2021-01-03 -1.0 NaN -0.9 2.0
2021-01-04 -1.2 NaN 1.6 3.4
uj5u.com熱心網友回復:
另一種做法:
df4 = df1[['01K W', '02K W', '03K W', '04K W']].astype(float).subtract(df2['K W'].astype(float), axis=0).abs().join(df1['Date'])[['Date','01K W', '02K W', '03K W', '04K W']]
print(df4)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/355478.html
