【问题标题】:Subtract one dataframe from another excluding the first column Pandas从另一个数据帧中减去一个数据帧,不包括第一列 Pandas
【发布时间】:2018-06-03 01:55:12
【问题描述】:

我必须使用具有相同列的数据框。我的任务应该是在不触及第一列('A')的情况下从 df_nap 中减去 df_tot。 最简单的解决方案是什么?

谢谢!

import numpy as np
import pandas as pd

df_tot = pd.DataFrame(np.random.randint(10, size=(3,4)), columns=list('ABCD'))
df_nap = pd.DataFrame(np.random.randint(10, size=(3,4)), columns=list('ABCD'))

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    只需减去整个 DataFrame,然后将所需的值重新分配给 Wavelength 列。

    result = df_tot - df_nap
    result['Wavelength'] = df_tot['Wavelength']
    

    例如,

    import numpy as np
    import pandas as pd
    
    df_tot = pd.DataFrame(np.random.randint(10, size=(3,4)), columns=list('ABCD'))
    df_nap = pd.DataFrame(np.random.randint(10, size=(3,4)), columns=list('ABCD'))
    # df_tot['A'] = df_nap['A']   # using column A as the "Wavelength" column
    
    result = df_tot - df_nap
    result['A'] = df_tot['A']
    

    或者,如果 Wavelength 列不是数字,您可以 减去除波长之外的所有内容,然后重新分配该列:

    result = df_tot.drop('Wavelength', axis=1) - df_nap.drop('Wavelength', axis=1)
    result['Wavelength'] = df_tot['Wavelength']
    

    【讨论】:

      【解决方案2】:

      在使用pd.DataFrame.sub之前为两个数据帧设置公共索引:

      df_tot = df_tot.set_index('Wavelength')
      df_nap = df_nap.set_index('Wavelength')
      
      res = df_tot.sub(df_nap)
      

      如果您需要将“波长”作为一个系列而不是一个索引,您可以在结果上调用reset_index

      res = res.reset_index()
      

      但是,将唯一的行标识符存储为索引而不是序列具有某些好处。例如,更高效的查找和合并功能。

      【讨论】:

        【解决方案3】:

        你也可以使用joiniloc

        df_tot.iloc[:,:1].join(df_tot.iloc[:,1:]-df_nap.iloc[:,1:])
        

        但这意味着列的顺序相同,“波长”是第一个

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-07-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-16
          • 1970-01-01
          • 2022-07-21
          • 2015-09-08
          相关资源
          最近更新 更多