如果每个值都相等,则删除熊猫数据框行

时间:2019-11-30 10:29:54

标签: python pandas

如果我的pandas数据框的一行包含浮点值,并且该行中的所有值都相等,那么如何从数据框中删除该行?

2 个答案:

答案 0 :(得分:0)

使用DataFrame.nunique测试每行唯一值的数量,使用Series.ne通过boolean indexing过滤出唯一行:

df1 = df[df.nunique(axis=1).ne(1)]

或者测试第一列是否相等,并根据DataFrame.any测试每行是否至少有True

df1 = df[df.ne(df.iloc[:, 0], axis=0).any(axis=1)]

编辑:如果要删除具有相同值的所有行和所有列,则应更改具有locaxis=0的测试列的解决方案:

df = pd.DataFrame({
         'B':[4,4,4,4,4,4],
         'C':[4,4,9,4,2,3],
         'D':[4,4,5,7,1,0],

})

print (df)
   B  C  D
0  4  4  4
1  4  4  4
2  4  9  5
3  4  4  7
4  4  2  1
5  4  3  0

df2 = df.loc[df.nunique(axis=1).ne(1), df.nunique(axis=0).ne(1)]

第二种解决方法:

df2 = df.loc[df.ne(df.iloc[:, 0], axis=0).any(axis=1), df.ne(df.iloc[0], axis=1).any(axis=0)]

print (df2)
   C  D
2  9  5
3  4  7
4  2  1
5  3  0

答案 1 :(得分:0)

您可以在每行axis=1上使用DataFrame.diff

# Example dataframe:
df = pd.DataFrame({'Col1':[1,2,3],
                   'Col2':[2,2,5],
                   'Col3':[4,2,9]})

   Col1  Col2  Col3
0     1     2     4
1     2     2     2  # <-- row with all same values
2     3     5     9
df[df.diff(axis=1).fillna(0).ne(0).any(axis=1)]

   Col1  Col2  Col3
0     1     2     4
2     3     5     9