Скопируйте значение в строках по уровням Панды

#python #pandas #lambda #apply

Вопрос:

Я хотел бы добавить значение онлайн по уровням. Если я нахожу значение, отличное от 0, в строке 0 для столбца 1, вся строка должна содержать различия значений, как описано в моем примере. Я не уверен, как обойти эту проблему. Если у вас есть какие-либо идеи

Ввод :

 import pandas as pd
data = {
    'Level1 - Code' : [0, 0, 0, 2],
    'Level2 - Code' : [0, 1, 0, 0],
    'Level3 - Code' : [2, 0, 0, 0],
    'Level4 - Code' : [0, 0, 0, 0]
}

df = pd.DataFrame(data)
print(df)
 

Выход :

 data = {
    'Level1 - Code' : [0, 0, 0, 2],
    'Level2 - Code' : [0, 1, 0, 2],
    'Level3 - Code' : [2, 1, 0, 2],
    'Level4 - Code' : [2, 1, 0, 2]
}

df_output = pd.DataFrame(data)
print(df_output)
 

Я пытаюсь сделать это с помощью этого :

 def f(x):
    lst_value = list(x.values)
    if 2 in lst_value:
        index = lst_value.index(2)
        lst_value[index:] = [2] * len(lst_value[index:])

    return pd.Series(lst_value, index = list(x.index))

df.apply(lambda x: f(x), axis = 1)
 

Спасибо,

Ответ №1:

Вы могли бы использовать cummax :

 df_output = df.cummax(axis=1)
 

выход:

    Level1 - Code  Level2 - Code  Level3 - Code  Level4 - Code
0              0              0              2              2
1              0              1              1              1
2              0              0              0              0
3              2              2              2              2
 

Комментарии:

1. Замечательно! Спасибо