Excel 在多列中按值定位行

Excel 在多列中按值定位行,excel,pandas,dataframe,rows,Excel,Pandas,Dataframe,Rows,这是我的数据帧(df): 我想迭代我的行,如果我在某处看到“999”值(id除外): 我需要确保整行都是“999” 我需要确保具有相同id值的第二行也包含“999” 例如,对于id=5,我有一行中有999,而id=5的第二行中没有999 预期产出: 这就是我所拥有的: num_of_p = len(df.columns) - 1 for v in df.index: if (sum(df.iloc[v] == 999) != num_of_p): if (sum(df

这是我的数据帧(df):

我想迭代我的行,如果我在某处看到“999”值(id除外):

  • 我需要确保整行都是“999”
  • 我需要确保具有相同id值的第二行也包含“999”
  • 例如,对于id=5,我有一行中有999,而id=5的第二行中没有999

    预期产出:

    这就是我所拥有的:

    num_of_p = len(df.columns) - 1
    for v in df.index:
        if (sum(df.iloc[v] == 999) != num_of_p):
            if (sum(df.iloc[v] == 999) != 0):
              raise Exception("***** value 999 should apply to the entire row -please check and re-run*****")
    
    这个代码适用于我的第一个条件。 我想不出第二个。
    任何帮助都将不胜感激

    您可以使用布尔索引:

    m=df.loc[:,“p1”:].apply(λx:999 in x.values,轴=1)
    df.loc[df[“id”].isin(df.loc[m,“id”]),“p1”:=999
    打印(df)
    
    印刷品:

    id p1 p2 p3 p4
    0   2    0    0    0    0
    1   2    1    1    1    1
    2   4  999  999  999  999
    3   4  999  999  999  999
    4   5  999  999  999  999
    5   5  999  999  999  999
    6   9    1    1    1    1
    7   9    0    0    0    0
    

    编辑:获取包含999的单个“行”(假设始终存在双胞胎):

    m=df.loc[:,“p1”:].apply(λx:999 in x.values,轴=1)
    x=df.loc[m,“id”].值_计数()
    打印('包含999且为“单个”的行:')
    打印(x[x==1].index.values)
    
    印刷品:

    包含999且为“单个”的行:
    [5]
    
    您的预期输出是什么?只有一行有全部999@Erfan我更新了预期输出。如果有一行甚至只有一个“999”,那么它应该都是“999”,第二行也应该有相同的id号。谢谢。为了不改变表格,你会写什么?我只是想知道这些条件是否成立。@HavingNoHead你想知道哪一行有999吗?掩码
    m
    在这些行上包含
    True
    。我已经设法确定一行中是否有999,而不是整行。我现在需要的是知道一行是否有999,而她的“双胞胎”行(相同的id号)是否没有..@HavingNoHead我已经更新了我的答案。知道了,你最好了。