从第一列Pandas中减去另一个数据帧

时间:2018-06-02 17:06:37

标签: python pandas

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

谢谢!

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'))

3 个答案:

答案 0 :(得分:5)

只需减去整个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']

答案 1 :(得分:1)

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

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

res = df_tot.sub(df_nap)

如果您需要将'Wavelength'作为系列而不是索引,则可以在结果上调用reset_index

res = res.reset_index()

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

答案 2 :(得分:1)

您还可以使用joiniloc

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

但这意味着具有相同的列顺序,而'波长'是第一个