簡體   English   中英

如果每個值都相等,則刪除熊貓數據框行

[英]delete pandas dataframe row if every value is equal

如果我有一個 pandas 數據框,其中一行包含浮點值,並且該行中的所有值都相等,我該如何從數據框中刪除該行?

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

您可以在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM