簡體   English   中英

從另一列中減去一個數據框(第一列Pandas除外)

[英]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()

但是,將唯一的行標識符存儲為索引而不是序列有一些好處。 例如,更有效的查找和合並功能。

您還可以使用joiniloc

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

但這意味着列的順序相同,並且“波長”是第一個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM