Присвоить порядковый номер переменным в python df

оценка данных калибровки

Для калибровки системы мне нужно сравнить эталонные («ref») и тестовые («test») переменные. df выглядит так (раздел из df с> 3000 переменных):

    df=pd.read_csv(file)
    df
Time    ref     test
sec     Q       Q
1       nan     nan
2       nan     nan
3       5,00    4,89
4       5,08    5,00
5       4,93    4,97
6       nan     nan
7       nan     nan
8       14,83   14,96
9       14,87   15,13
10      14,72   14,83
11      nan     nan
12      nan     nan
13      nan     nan
14      nan     nan
15      24,37   24,35
16      24,29   24,39
17      24,28   24,50
18      24,26   24,41
19      nan     nan

Для сравнения переменных «ref» и «test» мне нужно извлечь равнины с гистерезисом. Мог бы сделать это вручную:

    grades = []
    for row in df['ref']:
        if row < 5,5:
            grades.append('A')
        elif row < 15,5:
            grades.append('B')
        elif row < 26:
            grades.append('C')
        else:
            grades.append('Failed') 
    df['Result_Ref'] = grades
    df.dropna(inplace=True)

Но функция должна оценивать «ref» и «test» по гистерезису (+-3%) и автоматически назначать A, B, C,.... Результат должен выглядеть так:

   df
Time    ref     test    Result_Ref
sec     Q       Q
3       5,00    4,89    A
4       5,08    5,00    A
5       4,93    4,97    A
8       14,83   14,96   B   
9       14,87   15,13   B   
10      14,72   14,83   B
15      24,37   24,35   C
16      24,29   24,39   C
17      24,28   24,50   C
18      24,26   24,41   C

поскольку время и шаги/равнины (A, B, C, .... Z) не ограничены (до 20), функция, которую я ищу, должна искать в df ('ref', 'test') для следующего (большой шаг. Что-то типа

when x(i+1)>x(i)), than append('A:Z') 

и назначьте текущую переменную (1,2,3,.. или A, B, C,..) в столбец «Result_Rev».

Вот полный график к этому моменту полная калибровка с извлеченными равнинами Поскольку я новичок в python, я понятия не имею о такой функции;) Спасибо заранее

Добро пожаловать в СО. Вы получите гораздо больше помощи, если попробуете сами, а затем, если у вас возникнут трудности, разместите вопрос о конкретной проблеме. ТАК пользователи не пишут код для вас.

Nick 07.04.2019 17:45

означает также написать, как я добрался до первого df (шаги программы между ними)? просто хотел уменьшить длину сообщения, потому что я решаю большинство функций с помощью математических операций. но спасибо за комментарий

DisturbeD2203 08.04.2019 08:46
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Рассмотрите возможность использования разница качения:

df.dropna(inplace=True)
df['diff'] = df['ref'].diff()    

Вы можете предпочесть дискретную производную. Просто разделите на разницу во времени.

Имея это в виду, как бы вы назначили текущую переменную, показывающую номер шага?

Пожалуйста, измените свой вопрос, чтобы отразить код, с которым вы сейчас работаете, или, в идеале, опубликуйте ответ на свой вопрос. (Да ТАК поощряет вам отвечать на вопросы, даже на вопрос, который вы задали!)

моим первым намерением было: def delta(i,x): for i in range(i+x, len(df)-x): if 0.97*df.loc[i+x,'ref']<=df.loc[i,'ref']<=1.03*df.loc[i+x,'re‌​f']: df.loc[i, 'diff']=1 else: df.loc[i,'diff']=0 return но df['diff'] = df['ref'].diff()выглядит лучше.

DisturbeD2203 08.04.2019 15:42

Другие вопросы по теме