добавить значения столбца в соответствии со значением с помощью if - PullRequest
1 голос
/ 07 мая 2020

Я хотел бы создать следующий фрейм данных:

Desired Dataframe

df = pd.DataFrame({
    'A': ['0','0','0','8.020833015','8.009259224','8.003472328','8.020833015','0','0','5','4.994213104','0','0','0','8.012152672','8.009259224','0'],
    'Step_ID': ['Step_1','Step_1','Step_1','Step_2','Step_2','Step_2','Step_2','Step_3','Step_3','Step_4','Step_4','Step_5','Step_5','Step_5','Step_6','Step_6','Step_7']})
print (df)

У меня есть столбец A, и в соответствии с этими значениями я хотел бы для установки значений в столбце Step_ID.

Step_ID - начинается с Step_1. Затем, если число больше, то Step_2 (для всех чисел больше 0, пока не будут достигнуты нулевые значения). Затем нулевым значениям следует присвоить Step_3 и т. Д.

# add a Step ID
df = pd.DataFrame({
    'A': ['0','0','0','8.020833015','8.009259224','8.003472328','8.020833015','0','0','5','4.994213104','0','0','0','8.012152672','8.009259224','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['Step_ID'] = df['A'].apply(get_step)
df.to_csv('test.csv' , index=None)

Приведенный выше код делает нечто подобное, но только с уникальными номерами. Должно ли быть еще одно «если» - если значение> 0 для выполнения желаемой функции?

Ответы [ 2 ]

2 голосов
/ 07 мая 2020

Я вижу, вы реализовали шлюз XOR, но нам нужна некоторая настройка, я добавил новую функцию для проверки.

import pandas as pd

df = pd.DataFrame({
    'A': ['0','0','0','8.020833015','8.009259224','8.003472328','8.020833015','0','0','5','4.994213104','0','0','0','8.012152672','8.009259224','0']})
step = 0
value = None

def check(x, y):
    try:
        x = float(x)
        y = float(y)
        if x== 0 and y == 0:
            return 0
        elif x == 0 and y > 0:
            return 1
        elif x > 0 and y == 0:
            return 1
        else:
            return 0
    except:
        return 1

def get_step(x):
    global step
    global value
    # if x != value:
    if check(x, value):
        step += 1
        value = x
    return f'Step_{step}'
df['Step_ID'] = df['A'].apply(get_step)
df.to_csv('GSH0211.csv' , index=None)
1 голос
/ 07 мая 2020

Попробуйте это. Вы можете настроить порог на желаемое значение.

df = pd.DataFrame({'A': ['0','0','0','8.020833015','8.009259224','8.003472328','8.020833015','0','0','5','4.994213104','0','0','0','8.012152672','8.009259224','0']})

df['A'] = df['A'].astype(float)
diff = df['A']-df['A'].shift().fillna(0)
threshold = 0.1
df['Step_ID'] = (abs(diff)>threshold).cumsum().add(1)
df['Step_ID'] =  'Step_' + df['Step_ID'].astype(str)
df
           A Step_ID
0   0.000000  Step_1
1   0.000000  Step_1
2   0.000000  Step_1
3   8.020833  Step_2
4   8.009259  Step_2
5   8.003472  Step_2
6   8.020833  Step_2
7   0.000000  Step_3
8   0.000000  Step_3
9   5.000000  Step_4
10  4.994213  Step_4
11  0.000000  Step_5
12  0.000000  Step_5
13  0.000000  Step_5
14  8.012153  Step_6
15  8.009259  Step_6
16  0.000000  Step_7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...