![](/img/trans.png)
[英]Python DataFrame - Select dataframe rows based on values in a column of same dataframe
[英]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.iloc
和DataFrame.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.nunique
与axis=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.