[英]Subtract one dataframe from another excluding the first column 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'))
只需减去整个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']
或者,或者如果“波长”列不是数字列,则可以减去“波长”以外的所有内容,然后重新分配该列:
result = df_tot.drop('Wavelength', axis=1) - df_nap.drop('Wavelength', axis=1)
result['Wavelength'] = df_tot['Wavelength']
在使用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()
但是,将唯一的行标识符存储为索引而不是序列有一些好处。 例如,更有效的查找和合并功能。
您还可以使用join
和iloc
:
df_tot.iloc[:,:1].join(df_tot.iloc[:,1:]-df_nap.iloc[:,1:])
但这意味着列的顺序相同,并且“波长”是第一个
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.