[英]Set value of a row in a Pandas dataframe equal to that of a row in a different dataframe
[英]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)]
編輯:如果要刪除具有相同值的所有行和所有列,則應為具有loc
和axis=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.