Pandas 数据帧行删除

Pandas 数据帧行删除,pandas,Pandas,我正在尝试修复csv文件。 某些数据行需要根据几个条件删除。 假设您有以下数据帧: -A---B---C 000---0---0 000---1---0 001---0---1 011---1---0 001---1---1 如果两行或更多行有共同的A列,我希望将B列的行设置为1。 生成的数据帧应如下所示: -A---B---C 000---1---0 011---1---0 001---1---1 我尝试过合并和删除重复项,但似乎无法得到我需要的结果。不确定列B=1的行是否在B=0的行之后。删

我正在尝试修复csv文件。
某些数据行需要根据几个条件删除。
假设您有以下数据帧:

-A---B---C
000---0---0
000---1---0
001---0---1
011---1---0
001---1---1

如果两行或更多行有共同的A列,我希望将B列的行设置为1。
生成的数据帧应如下所示:

-A---B---C
000---1---0
011---1---0
001---1---1

我尝试过合并和删除重复项,但似乎无法得到我需要的结果。不确定列B=1的行是否在B=0的行之后。删除副本的take_最后一个参数似乎很有吸引力,但我认为它不适用于这里。

任何建议都将不胜感激。
谢谢。

不是直截了当的,但这应该行得通

DF = pd.DataFrame({'A' : [0,0,1,11,1], 'B' : [0,1,0,1,1], 'C' : [0,0,1,0,1]})

DF.ix[DF.groupby('A').apply(lambda df: df[df.B == 1].index[0] if len(df) > 1 else df.index[0])]
    A  B  C
1   0  1  0
4   1  1  1
3  11  1  0
注:

  • groupby将DF划分为具有唯一A值的行组,即A=0(2行)、A=1(2行)和A=11(1行)的组
  • Apply然后对每个组调用函数并同化结果
  • 在函数(lambda)中,如果组中有多行,我将查找值为B==1的行的索引,否则我将使用默认行的索引
  • apply的结果是一个索引值列表,如果组中有多行不是给定a的默认行,则这些索引值表示B==1的行
  • 然后,ix运算符使用索引值访问相应的行

    • 我绕着熊猫走了一圈,得到了我想要的结果。 虽然不漂亮,但它完成了任务

      res = DataFrame(columns=('CARD_NO', 'STATUS'))
      for i in grouped.groups:
          if len(grouped.groups[i]) > 1:
              card_no = i
              print card_no
              for a in grouped.groups[card_no]:
                  status = df.iloc[a]['STATUS']
                  print 'iloc:'+str(a) +'\t'+'status:'+str(status)
                  if status == 1:
                      print 'yes'
      
                      row = pd.DataFrame([dict(CARD_NO=card_no, STATUS=status), ])
                      res = res.append(row, ignore_index=True)
                  else:
                      print 'no'
          else:
              #only 1 record found
              #could be a status of 0 or 1
              #add to dataframe
              print 'UNIQUE RECORD'
             card_no = i
              print card_no
              status = df.iloc[grouped.groups[card_no][0]]['STATUS']
              print grouped.groups[card_no][0]
              #print status
              print 'iloc:'+str(grouped.groups[card_no][0]) +'\t'+'status:'+str(status)
      
              row = pd.DataFrame([dict(CARD_NO=card_no, STATUS=status), ])
              res = res.append(row, ignore_index=True)
      print res
      

      df1=df.loc[df.b==1]
      不应该给你你想要的,或者你希望有行,其中“a”的值是唯一的,而“b”仍然是0吗?我还想保留行,其中a的值是唯一的,b的值是0。基本上,我想从df=pd.DataFrame({'a':['000','001','011 001','001','111']数据帧({'A':['000','001','011','111'],'B':[1,1,1,0]})这对于给定的示例非常有效。在实际的大型数据集上使用它时,我得到以下错误:IndexError:index 0超出了大小为0的轴0的界限。知道为什么吗?我的数据集包含500k行和一个标题。示例行“60189567950131511310392,1,0”同样,你能引导我完成你答案的步骤吗?我很难理解它。我应该提到,如果给定的a存在多行,那么解决方案假设B==1存在。我猜这违反了假设,因此出现了错误