#python #pandas
#python #pandas
Вопрос:
Я новичок в Python и пытаюсь воспроизвести на Python то, что сделано в Excel.
Я хочу взять разницу в столбцах (A, B, C) со средним значением (фиксированным)
Unnamed:0 A B C mean Mean diffA
0 2020-08-28 1 6 11 6.0 -5.0
1 2020-08-29 2 7 12 7.0 -5.0
2 2020-08-30 3 8 13 8.0 -5.0
3 2020-08-31 4 9 14 9.0 -5.0
4 2020-09-01 5 10 15 10.0 -5.0
1 способ — вручную ввести имя столбца и найти разницу, но есть ли какой-либо другой, менее ручной способ?
new_df['Mean diffA']=new_df['A']-new_df['mean']
Комментарии:
1. Было бы здорово указать, какую библиотеку вы используете
Ответ №1:
Вы можете вычесть среднее значение из диапазона столбцов:
diffs = new_df.loc[:, 'A':'C'].subtract(new_df['mean'], axis=0)
Затем объедините различия и исходный фрейм данных:
new_df.join(diffs, rsuffix='_mean')
Комментарии:
1. спасибо, но если у меня большой набор данных, мне все равно нужно вводить (‘A’:’C’)?, есть ли способ использовать индексацию для указания столбца
2. Да, вы можете использовать индексы с . iloc
Ответ №2:
У вас есть несколько вариантов для этого. Я попробовал следующее, и это сработало.
import pandas as pd
dt = {'START DATE':['2020-08-28','2020-08-29','2020-08-30',
'2020-08-31','2020-09-01'],
'A':[1,2,3,4,5],
'B':[6,7,8,9,10],
'C':[11,12,13,14,15]}
df = pd.DataFrame(dt)
df['Mean'] = df.loc[:,'A':'C'].mean(axis=1)
df[['dA','dB','dC']] = df.loc[:, 'A':'C'].subtract(df['Mean'], axis=0)
print(df)
ИЛИ вы также можете попробовать сделать что-то подобное
df[['dA','dB','dC']] = df.loc[:,'A':'C'] - df[['Mean','Mean','Mean']].values
print(df)
Оба они будут обеспечивать одинаковый результат:
START DATE A B C Mean dA dB dC
0 2020-08-28 1 6 11 6.0 -5.0 0.0 5.0
1 2020-08-29 2 7 12 7.0 -5.0 0.0 5.0
2 2020-08-30 3 8 13 8.0 -5.0 0.0 5.0
3 2020-08-31 4 9 14 9.0 -5.0 0.0 5.0
4 2020-09-01 5 10 15 10.0 -5.0 0.0 5.0
Второй вариант не является хорошим способом его использования. Pandas предоставляет вам функцию вычитания. Используйте это.