Создать новый столбец в pandas - условно увеличить число целых чисел - PullRequest
1 голос
/ 28 апреля 2020

Я хотел бы иметь фрейм данных pandas, как показано ниже: Обязательный фрейм данных

Столбец A - в соответствии с этими значениями я хотел бы создать новую переменную - Столбец B.

Все время, когда значения изменяются, должно быть выполнено «Step_ (new_number)». Таким образом, первые нулевые значения - это Step_1, затем следующие значения должны быть Step_2, затем другая строка с номерами должна быть Step_3 и т. Д.

Это то, что я сделал до сих пор:

def f(row):
    if row['A'] > 0 :
        val = "Step_1"
    else:
        val = "Step_0"
    return val
df['B'] = df.apply(f, axis=1)

Но я не понимаю, как условно увеличить количество значений в новом столбце B. Обратите внимание, что Step_1 можно заменить на «1» - это не обязательно должен быть текст, чтобы принять решение легче.

1 Ответ

0 голосов
/ 28 апреля 2020

Один из вариантов - создать некоторые глобальные переменные для отслеживания значения и шага, а также ссылаться на / обновлять те, которые находятся внутри функции, которую вы используете с pandas.Series.apply, например:

import pandas as pd

df = pd.DataFrame(dict(
    A = [0,0,0,44.67,44.67,0,0,35.49,35.49,35.49,0]
))

step = 0
value = None

def get_step(x):
    global step
    global value
    if x != value:
        value = x
        step += 1
    return f'Step_{step}'

df['B'] = df['A'].apply(get_step)
print(df)

Вывод:

        A       B
0    0.00  Step_1
1    0.00  Step_1
2    0.00  Step_1
3   44.67  Step_2
4   44.67  Step_2
5    0.00  Step_3
6    0.00  Step_3
7   35.49  Step_4
8   35.49  Step_4
9   35.49  Step_4
10   0.00  Step_5

Пример кода в python tutor

...