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

2024-10-01 00:25:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用groupby函数和value_counts()创建了一个pandasseries。我想选择一个具有多个值的行。你知道吗

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

我想选择具有多个NameBDvalue219。你知道吗


Tags: 函数nameinputoutputvalueexgroupbycounts
2条回答

我认为两列都需要^{}

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

另一种解决方案是首先通过^{}创建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

不需要额外的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']

相关问题 更多 >