74180


dataframeの各列を1列目の値で引こうとし、以下のコードで試みたのですが、計算結果のdf2を見ると、1列目は自身の値で引いているので当然0になりますが、他の列は1列目で引かれていなものが返されてしまいます  
こちらどのように書き直せばよいか、ご教示いただけると幸いです

[code]

    df2=df
    
    for i in df.columns.values :
        df2[i]=df[i]-df.iloc[:,0]
    
[/code]


CC BY-SA 4.0
2021-02-21T10:26:37.090
74179
2021-02-21T11:15:57.670
2021-02-21T10:43:13.960
3060
44061
question
python pandas
dataframeの各列を1列目の値で引きたい


質問のコードでは`df2`が`df`の参照となっていますので`df2`を`df`のコピーにすると質問者さんの意図する結果になるかと思います。

[code]

    df2=df.copy()
    
    for i in df.columns.values :
        df2[i]=df[i]-df.iloc[:,0]
    
[/code]


CC BY-SA 4.0
2021-02-21T10:34:24.983
74180
2021-02-21T10:34:24.983
39819
74179
answer


(書き直す感じではないが) この様にも記述可能です

[code]

    import pandas as pd
    df = pd.DataFrame([[1,11,12,13],[2,21,22,23]], columns=list('ABCD'))
    
    df2 = df.apply(lambda v: v - df['A'])
    
    display(df)
    display(df2)
    
[/code]


CC BY-SA 4.0
2021-02-21T10:58:24.637
74181
2021-02-21T10:58:24.637
43025
74179
answer


[pandas.DataFrame.subtract](https://pandas.pydata.org/pandas-
docs/stable/reference/api/pandas.DataFrame.subtract.html) を使う方法もあります。

[code]

    import pandas as pd
    
    df = pd.DataFrame(
      [
        [1, 4, 7],
        [2, 5, 8],
        [3, 6, 9]
      ]
    )
    
    df2 = df.sub(df.iloc[:,0], axis=0)
    print(df2)
    =>
       0  1  2
    0  0  3  6
    1  0  3  6
    2  0  3  6
    
[/code]


CC BY-SA 4.0
2021-02-21T11:10:54.000
74182
2021-02-21T11:15:57.670
2021-02-21T11:15:57.670
74179
answer