Python - Сравнить значение столбца со значением строки - PullRequest
0 голосов
/ 09 января 2019

В настоящий момент у меня немного логической проблемы ... По сути, я пытаюсь сравнить значения столбцов одного CSV со значениями строк в другом CSV. Вот мой код до сих пор:

import tkinter as tk
from tkinter import filedialog

#import numpy as np
#import matplotlib.pyplot as plt
import pandas as pd

root = tk.Tk()
root.withdraw()

thresholdsFile = filedialog.askopenfilename(title='Select The Thresholds File:')
mDataFile = filedialog.askopenfilename(title='Select The M Data File:')

df = pd.read_csv(thresholdsFile)
df2 = pd.read_csv(mDataFile)

def thresholdCheck(thresholds, mdata):
    for index, row in thresholds.iterrows():
        for index1, row1 in mdata.iterrows():
            if (row1[index1]) < row['Minimum Threshold:']:
                print('Minimum threshold broken!')
            elif (row1[index1]) > row['Maximum Threshold:']:
                print('Maximum threshold broken!')
            else:
                print('No threshold broken!')

sampleOutput = thresholdCheck(df, df2)
print(sampleOutput)

Создает следующий вывод:

Минимальный порог сломан! Максимальный порог сломан! Порог не сломан! Максимальный порог сломан! Ни один

Что не так. :(

Прилагаются два образца CSV, которые я собрал для проверки кода. Thresholds и Machine Data

То есть, как это должно работать, это значения столбцов 2 . Машинные данные должны считываться вертикально и сравниваться с 1 горизонтальными строками данных порогов, поэтому в этом на случай, если это будет выглядеть так:

(Oil Temp) 55 сравнивается с 56 и 115 (минимальные / максимальные пороги на первом рисунке), триггеры ниже 56 ---> минимальный порог нарушен

(температура масла) 116 сравнивается с 56 и 115 (минимальные / максимальные пороги), срабатывает выше 115 ---> максимальный порог превышен

Теперь

(Oil Press) 43 сравнивается с 44 и 126 (мин / макс пороги), срабатывает ниже 44 ---> минимальный порог сломан

(Oil Press) 127 сравнивается с 44 и 126 (минимальные / максимальные пороги), срабатывает выше 126 ---> максимальный порог превышен

Input

df = pd.DataFrame( {'Variable Name:':['Oil Temp','Oil Press'],
                    'Minimum Threshold:':[56,44],'Maximum Threshold:':[115, 126]})

df2 = pd.DataFrame({'Oil Temp':[95,116],'Oil Press':[43,127]})

1 Ответ

0 голосов
/ 09 января 2019

Вы можете сделать следующее:

## set index, easy to look up
df1 = df1.set_index('Variable Name')

# convert to dict
df2_dict = df2.to_dict(orient='list')

result = []

for k,v in df2_dict.items():
    vals = df1.loc[k].tolist()
    for j in v:

        if j < min(vals):
            result.append('minimum threshold broken')

        if j > max(vals):
            result.append('maximum threshold broken')

print(result)

['minimum threshold broken',
 'maximum threshold broken',
 'minimum threshold broken',
 'maximum threshold broken']

Настройка

df1 = pd.DataFrame({'Variable Name':['Oil Temp','Oil Press'],
                    'Minimum Threshold': [56, 44],
                    'Maximum Threshold': [115, 126]})

df2 = pd.DataFrame({'Oil Temp':[55, 116],
                    'Oil Press': [43, 127]})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...