#python #excel #pandas
Вопрос:
У меня есть лист Excel с несколькими столбцами, три из которых называются X Y Z. Я пытаюсь применить ту же формулу к трем столбцам, используя фрейм данных panda. Мне нужно вычесть последнее значение в столбце из каждого значения ячейки в этом столбце; сохраните новое значение и продолжайте двигаться вниз по столбцу. Есть ли способ сделать это без повторения каждой строки? Этот процесс должен выполняться только для каждого из столбцов X Y и Z.
INPUT
T X Y Z vx vy vz
0 0 0 3 3 4 5
1 0 1 4 4 4 6
2 23 6 9 5 6 6
3 35 9 9 7 7 8
Output
T X Y Z vx vy vz
0 -35 -9 -6 3 4 5
1 -35 -8 -5 4 4 6
2 -12 -3 0 5 6 6
3 0 0 0 7 7 8
Комментарии:
1. Можете ли вы обеспечить ввод и вывод? Это облегчит понимание вашей проблемы.
Ответ №1:
Очевидно, не каждый из столбцов, так как вы применяете его только к столбцам X, Y и Z.
в любом случае,
выбор входного столбца, а затем вычитание последней записи в нем, похоже, то, что вы ищете.
df = pd.read_clipboard()
df[["X","Y","Z"]] = df[["X", "Y", "Z"]] - df[["X", "Y", "Z"]].iloc[-1]
выход:
# T X Y Z vx vy vz
#0 0 -35 -9 -6 3 4 5
#1 1 -35 -8 -5 4 4 6
#2 2 -12 -3 0 5 6 6
#3 3 0 0 0 7 7 8
Комментарии:
1. Есть ли способ использовать индекс столбца вместо имени. Некоторые листы в книге имеют небольшое изменение в заголовке, как в «x_n» вместо «x».
2. Ага. вы также можете получить доступ к столбцам с помощью целочисленной индексации местоположения.
df.iloc[:, 1:4] -= df.iloc[-1, 1:4]
это была бы моя первоначальная ставка на приведенный выше фрагмент.
Ответ №2:
Предполагая, что вы хотите сделать все столбцы, это будет работать с электронной таблицей под названием «file.xls»:
import pandas as pd
df = pd.read_excel('file.xls', header=None)
for i in df.columns:
df[i] = df[i] - int(df[i].tail(1))
print (df)