Вычтите один фрейм данных из другого, исключая первый столбец Pandas - PullRequest
0 голосов
/ 02 июня 2018

У меня есть датафреймы с такими же столбцами.Моя задача должна состоять в том, чтобы вычесть df_tot из df_nap, не касаясь первого столбца ('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 голосов
/ 02 июня 2018

Установите общий индекс для обоих фреймов данных перед использованием 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()

Однако при сохранении уникального идентификатора строки в качестве индекса, а не ряда, есть определенные преимущества.Например, более эффективные функции поиска и слияния.

0 голосов
/ 02 июня 2018

вы также можете использовать join и iloc:

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

, но это означает, что столбцы должны быть одинакового порядка, а длина волны - первой

0 голосов
/ 02 июня 2018

Просто вычтите все кадры данных, затем переназначьте нужные значения столбцу длины волны.

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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...