【发布时间】:2019-01-09 02:07:58
【问题描述】:
目前有点逻辑问题...基本上,我正在尝试将一个 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)
它产生以下输出:
最低门槛突破! 最大门槛被打破! 门槛不破! 最大门槛被打破! 无
这是错误的。 :(
所以它应该工作的方式是2机器数据的列值应该以垂直方式读取并与1阈值数据的水平行进行比较,所以在这种情况下它应该是这样的:
(油温)55 与 56 和 115(第一张图片中的最小/最大阈值)进行比较,触发器低于 56 ---> 最小阈值损坏
(油温)116 与 56 和 115(最小/最大阈值)进行比较,触发高于 115 ---> 最大阈值已损坏
现在
(油压机)43 与 44 和 126(最小/最大阈值)进行比较,触发低于 44 ---> 最小阈值被破坏
(油压机)127 与 44 和 126(最小/最大阈值)进行比较,触发高于 126 ---> 最大阈值被破坏
输入
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]})
【问题讨论】:
-
您能否在您的问题中添加
print (df.head(2))和print (df2.head(2))的结果(不是图片中的CSV)。同时,考虑将row1[index1])更改为row1[row['Variable Name:']])两次,如果我不明白你想做什么。我怀疑row1[index1])得到你想要的。另一个建议,像这样做两个循环for并不是最好的,特别是如果你的 2 个数据框很大。 -
@Ben.T 非常感谢您的回复!我附上了示例输出的图片。你达到了另一个相关点。我并不难坚持这两个循环,因为其中一个数据帧相当大。如果您有更好的方法,我会全力以赴!
-
哈哈 我误解了我添加
print的意思(我的英语并不总是很好),我的意思不是图片而是纯文本,因为任何人都更容易使用@987654336 @ 或类似的东西可以轻松获取数据。无论如何,我会尽快编辑你的帖子。另外,当你说一个数据框很大时,我假设你的意思是df2/mdata,对吧? -
@Ben.T 你是对的。机器数据文件会更大。
标签: python-3.x pandas dataframe