繁体   English   中英

在 python dataframe 如果所有列的值都相同,如何基于 select 行?

[英]In python dataframe how to select rows based if all the columns values are same?

我有以下df格式:

Name  A1   A2  A3  A4
def   0    0   0   0
def1  0    1   0   0
def2  0    0   0   0
def3  1    0   0   0
def4  0    0   0   0

预期 output:

Name  A1   A2  A3  A4
def   0    0   0   0
def2  0    0   0   0
def4  0    0   0   0

如果Name是第一列,则使用DataFrame.ilocDataFrame.all选择的所有列比较第一列:

df1 = df.iloc[:, 1:]
#if `Name` is any column
#df1 = df.drop('Name', axis=1)

df = df[df1.eq(df1.iloc[:, 0], axis=0).all(axis=1)]
print (df)
   Name  A1  A2  A3  A4
0   def   0   0   0   0
2  def2   0   0   0   0
4  def4   0   0   0   0

如果Name是索引:

print (df)
      A1  A2  A3  A4
Name                
def    0   0   0   0
def1   0   1   0   0
def2   0   0   0   0
def3   1   0   0   0
def4   0   0   0   0


df = df[df.eq(df.iloc[:, 0], axis=0).all(axis=1)]
print (df)
      A1  A2  A3  A4
Name                
def    0   0   0   0
def2   0   0   0   0
def4   0   0   0   0

如果性能不重要,因为在大型 DataFrame 中速度较慢,请使用DataFrame.nunique

df = df[df.nunique(axis=1).eq(1)]

使用pandas.DataFrame.nuniqueaxis=1

df.set_index("Name").nunique(1).eq(1)

Output:

Name
def      True
def1    False
def2     True
def3    False
def4     True
dtype: bool

另一种方法是检查每列的方差:

df[df.var(axis=1) == 0]
Name  A1   A2  A3  A4
def   0    0   0   0
def2  0    0   0   0
def4  0    0   0   0

使用 dataframe 上的 drop 方法删除整行。

data.drop(["def1", "def3"], inplace = False)

第一个参数是索引列表。 如果为真,就地参数是更改原始 dataframe。

要了解更多信息,请访问: Dataframe

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM