【问题标题】:Copy value in rows by level Pandas按级别熊猫复制值
【发布时间】:2021-10-10 10:37:28
【问题描述】:

我想按级别在线添加值。如果我在第 0 行的第 1 列中找到除 0 以外的值,则整行必须包含不同的值,如我的示例中所述。我不确定如何解决这个问题。如果你有什么想法

输入:

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)

谢谢,

【问题讨论】:

    标签: python pandas lambda apply


    【解决方案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
    

    【讨论】:

    • 太棒了!谢谢
    猜你喜欢
    • 2019-05-03
    • 2012-11-05
    • 2021-04-17
    • 2019-04-12
    • 1970-01-01
    • 2017-10-01
    • 2016-04-03
    • 2021-09-17
    • 2020-10-08
    相关资源
    最近更新 更多