熊猫删除与列名相同的行

时间:2019-10-07 08:48:28

标签: python pandas

我有一个数据框,如下所示,其中Name, Marks, Grade是列名:

print (df)
    Name  Marks  Grade
0    Abc     70      A
1    Def     42      D
2    Ghi     54      D
3   Name  Marks  Grade
4    Jkl     31      F
5    Mno     76      B
6   Name  Marks  Grade
7    Pqr     B1      A
8    Stu     23      F
9    Vwx     90      A
10  Name  Marks  Grade
11    Yz     58      C

我希望删除所有值与列名相同的行,以获取以下数据框-

print (df)
   Name Marks Grade
0   Abc    70     A
1   Def    42     D
2   Ghi    54     D
4   Jkl    31     F
5   Mno    76     B
7   Pqr    B1     A
8   Stu    23     F
9   Vwx    90     A
11   Yz    58     C

有人可以建议如何做到吗?

2 个答案:

答案 0 :(得分:1)

您可以比较一个列名,例如第三,并按boolean indexing进行过滤:

c = df.columns[2]

df1 = df[df[c] != c]

工作原理类似:

df1 = df[df['Grade'] != 'Grade']

如果要比较所有列的名称也是可能的,则仅按DataFrame.all测试每行的所有值是否为True

df1 = df[(df != df.columns).all(axis=1)]
print (df1)
   Name Marks Grade
0   Abc    70     A
1   Def    42     D
2   Ghi    54     D
4   Jkl    31     F
5   Mno    76     B
7   Pqr    B1     A
8   Stu    23     F
9   Vwx    90     A
11   Yz    58     C

答案 1 :(得分:0)

您可以使用布尔掩码和df.drop在“标记”列中删除具有“标记”值的行。

bool_mask = df['Marks'] != 'Marks' #Make boolean mask where rows with 'Marks' are False.
df = df.drop(bool_mask)