繁体   English   中英

减去同一列时的 NaNs dataframe

[英]NaNs when subtracting the same column dataframe

我有一个像这样的 dataframe:

Date,Close
1987-01-02,2540.100098
1987-01-05,2552.399902
1987-01-06,2583.899902
1987-01-07,2607.100098
1987-01-08,2603.300049

我试图将每一行减去所有其他行,但结果返回所有 NaN,我不知道为什么:

import pandas as pd
import numpy as np
df = pd.read_csv('test.csv')
df1 = pd.DataFrame(np.subtract(df['Close'], df['Close']), df.Date, df.Date)
print(df1)

结果:

Date       1987-01-02 1987-01-05 1987-01-06 1987-01-07 1987-01-08
Date
1987-01-02        NaN        NaN        NaN        NaN        NaN
1987-01-05        NaN        NaN        NaN        NaN        NaN
1987-01-06        NaN        NaN        NaN        NaN        NaN
1987-01-07        NaN        NaN        NaN        NaN        NaN
1987-01-08        NaN        NaN        NaN        NaN        NaN

您可以使用broadcasting

df1 = pd.DataFrame(np.subtract(df['Close'].to_numpy(), df['Close'].to_numpy()[:, None]), df.Date, df.Date)
print(df1)
Date        1987-01-02  1987-01-05  1987-01-06  1987-01-07  1987-01-08
Date                                                                  
1987-01-02    0.000000   12.299804   43.799804   67.000000   63.199951
1987-01-05  -12.299804    0.000000   31.500000   54.700196   50.900147
1987-01-06  -43.799804  -31.500000    0.000000   23.200196   19.400147
1987-01-07  -67.000000  -54.700196  -23.200196    0.000000   -3.800049
1987-01-08  -63.199951  -50.900147  -19.400147    3.800049    0.000000

subtract.outer

df1 = pd.DataFrame(np.subtract.outer(df['Close'].to_numpy(), df['Close'].to_numpy()), df.Date, df.Date)
print(df1)
Date        1987-01-02  1987-01-05  1987-01-06  1987-01-07  1987-01-08
Date                                                                  
1987-01-02    0.000000  -12.299804  -43.799804  -67.000000  -63.199951
1987-01-05   12.299804    0.000000  -31.500000  -54.700196  -50.900147
1987-01-06   43.799804   31.500000    0.000000  -23.200196  -19.400147
1987-01-07   67.000000   54.700196   23.200196    0.000000    3.800049
1987-01-08   63.199951   50.900147   19.400147   -3.800049    0.000000

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM