如何获得具有x个特征值且两个特征相同的行的索引?

时间:2019-03-23 15:33:00

标签: pandas dataframe

示例数据框:

pd.DataFrame({'Name':['John','Peter','John','John','Donald'],
              'City':['Boston','Japan','Boston','Dallas','Japan'],
              'Age':[23,31,21,21,22]})

dataframe

我想要的是使用熊猫获取具有相同“名称”和“城市”但年龄不同的所有行的索引列表。
在这种情况下:它应该返回[0,2]

3 个答案:

答案 0 :(得分:3)

尝试以下操作:

df[df.duplicated(['Name','City'],keep=False)&~df.duplicated(keep=False)]

   Name    City  Age
0  John  Boston   23
2  John  Boston   21

编辑:@ALollz指出的场景可以使用:

df = pd.DataFrame({'Name':['John','Peter','John','John','Donald', 'John'],
              'City':['Boston','Japan','Boston','Dallas','Japan', 'Boston'],
              'Age':[23,31,21,21,22, 23]})
df[df.duplicated(['Name','City'],keep=False)].drop_duplicates()

输出:

   Name    City  Age
0  John  Boston   23
2  John  Boston   21

答案 1 :(得分:1)

  

我想要获取具有“名称”和“城市”但年龄不同的所有行的索引列表

我认为这有点模棱两可,因为如果“名称城市”组包含相同年龄但有些不同的条目怎么办?根据您所需的输出,groupby + transform + nunique可能需要过滤。

样本数据:

请注意,我在此处添加了一个小写字母,其中John Boston 23是重复的:

import pandas as pd
df = pd.DataFrame({'Name':['John','Peter','John','John','Donald', 'John'],
                  'City':['Boston','Japan','Boston','Dallas','Japan', 'Boston'],
                  'Age':[23,31,21,21,22, 23]})

#     Name    City  Age
#0    John  Boston   23
#1   Peter   Japan   31
#2    John  Boston   21
#3    John  Dallas   21
#4  Donald   Japan   22
#5    John  Boston   23

代码:

df[df.groupby(['Name', 'City']).Age.transform(pd.Series.nunique).gt(1)]

#   Name    City  Age
#0  John  Boston   23
#2  John  Boston   21
#5  John  Boston   23

在其他解决方案中,精确的重复可能会导致不必要的输出:

df[df.duplicated(['Name','City'],keep=False)&~df.duplicated(keep=False)]
#   Name    City  Age
#2  John  Boston   21

答案 2 :(得分:0)

另一种方法可以通过使用groupby():

df[df.groupby(['Name', 'City']).transform(len)['Age']>1]

或者可能与使用重复的()一样分两个步骤:

df =df.set_index('Age')
df[df.duplicated(['Name', 'City'], keep = False)].reset_index()