如何选择熊猫系列中包含多个值的特定行?

时间:2018-06-27 10:00:32

标签: python pandas pandas-groupby

我已经使用series函数和groupby创建了一个熊猫value_counts()。我想选择一个具有多个值的行。

Input:
Name                         Value
A                             201         
B                             219
B                             219         
C                             704   
D                             222      
D                             219
ex = ex.groupby("Value")
ex = ex["Name"].value_counts()

Output:
 Value  Name    
  201    A      3
  219    B      2
         D      1
  704    C      1
  222    D      1

我要选择value 219,其中有多个Name BD

2 个答案:

答案 0 :(得分:0)

我认为两栏都需要DataFrame.duplicated

df = df[df.duplicated(['Name','Value'], keep=False)]
print (df)
  Name  Value
1    B    219
2    B    219

但是如果需要输出计数值,请按级别Value进行过滤:

s = df.groupby("Value")["Name"].value_counts()
print (s)

df1 = s[s.index.get_level_values('Value').duplicated(keep=False)].reset_index(name='count')
print (df1)
   Value Name  count
0    219    B      2
1    219    D      1

另一种解决方案是首先由reset_index创建DataFrame

df2 = df.groupby("Value")["Name"].value_counts().reset_index(name='count')
print (df2)
   Value Name  count
0    201    A      1
1    219    B      2
2    219    D      1
3    222    D      1
4    704    C      1

df1 = df2[df2['Value'].duplicated(keep=False)]
print (df1)
   Value Name  count
1    219    B      2
2    219    D      1

答案 1 :(得分:-1)

不需要额外的groupby

您可以将pd.Series.duplicated原始数据框一起使用:

res = df[df['Value'].duplicated(keep=False)]

print(res)

  Name  Value
1    B    219
3    D    219

print(res['Name'].tolist())

['B', 'D']