#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. Замечательно! Спасибо