Python: доступ к значению ячейки в panda и выполнение математических операций - PullRequest
0 голосов
/ 19 октября 2018

У меня есть файл Excel с 4 строками и 4 столбцами с метками столбцов 1,2,3,4

               1      2        3       4
 Row   1      12      10       7       6
 Row   2      16      22       9      18
 Row   3      26      10      10       5
 Row   4      24       5      17       1

Я хочу получить доступ к строке 3, целому числу 1 и строке 4, целому числу 1значение, чтобы проверить, будет ли добавление обеих ячеек равным 50 или нет.Любая комбинация (p, q, r) в этом случае должна добавлять значения (строка q, col p) и (строка r, col p), а если значения = 50, тогда возвращать (p, q, r) в качестве комбинации.

В этом случае вывод должен быть: (1,3,4) .

import pandas as pd

import numpy as np

a = [1,2,3,4]

df = pd.read_excel('example.xlsx', sheetname='Sheet1')

combo = [(p,q,r) for p in a for q in a for r in a 
                  if (df.iloc[q,p] + df.iloc[r,p] = 50)]

print (combo)

Обновление:

Попробовал это, но с небольшой модификацией, т.е. я делаю свои вычисления между столбцами таблицы:

Комбинация (1,3,4) теперь должна искать значения в следующих ячейках

(1,1) (1,3) (1,4)

(3,1) (3,3) (3,4)

(4,1) (4,3) (4,4)

import numpy as np

import pandas as pd

df = pd.read_excel('example.xlsx', sheetname='Sheet1')

df.index = list(range(1, df.shape[1] + 1))
df.columns = list(range(1, df.shape[1] + 1))

combo = [(p,q,r) for p in df.columns for q in df.columns for r in df.columns 
          if q > p and r > q and r > p
          and df.loc[p,p] - df.loc[p,q] == df.loc[q,p] - df.loc[q,q]]

Я получаю следующее ошибка :

Ошибка значения: Несоответствие длины: Ожидаетсяось имеет 3 элемента, новые значения имеют 4 элемента

1 Ответ

0 голосов
/ 19 октября 2018

Во-первых, убедитесь, что ваш индекс DataFrame и столбцы являются целочисленными индексами, начиная с 1 (чтобы соответствовать вашим входным данным):

df.index = list(range(1, df.shape[0] + 1))
df.columns = list(range(1, df.shape[1] + 1))

Далее, ваше понимание списка было на правильном пути:

[(p,q,r) for p in df.index for q in df.index for r in df.columns 
 if df.loc[q,p] + df.loc[r,p] == 50]

# Output
[(1, 3, 4), (1, 4, 3)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...