pandas 如果每个值相等,则删除panda Dataframe 行

g9icjywg  于 2023-03-16  发布在  其他
关注(0)|答案(2)|浏览(207)

如果我有一个panda Dataframe ,其中有一行包含浮点值,并且该行中的所有值都相等,如何从 Dataframe 中删除该行?

juud5qan

juud5qan1#

使用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)]

对于第二种解决方案:
一个三个三个一个

mcvgt66p

mcvgt66p2#

可以使用DataFrame.diff而不是axis=1(每行):

# 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

相关问题