dataframeの各列を1列目の値で引きたい


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

[code]

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




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

[code]

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




[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]

