根据其他列的一定数量的值获取列值

Get a column value based on the certain number of values of other column

我的数据框 df 是:

data = {'Election Year':['2000', '2000','2000','2000','2000','2000','2000','2000','2000','2005','2005','2005','2005','2005','2005','2005','2005','2005'],
    'Votes':[50, 100, 70, 26, 180, 100, 120, 46, 80, 129, 46, 95, 60, 23, 95, 16, 65, 35], 
    'Party': ['A', 'B', 'C', 'A', 'B', 'C','A', 'B', 'C','A', 'B', 'C','A', 'B', 'C','A', 'B', 'C'],
    'Region': ['a', 'a', 'a', 'b', 'b', 'b','c', 'c', 'c','a', 'a', 'a', 'b', 'b', 'b','c', 'c', 'c']}
df = pd.DataFrame(data)
df

    
    Election Year   Votes   Party   Region
  0   2000           50      A       a
  1   2000           100     B       a
  2   2000           70      C       a
  3   2000           26      A       b
  4   2000           180     B       b
  5   2000           100     C       b 
  6   2000           120     A       c
  7   2000           46      B       c
  8   2000           80      C       c
  9   2005           129     A       a
  10  2005           46      B       a
  11  2005           95      C       a
  12  2005           60      A       b
  13  2005           23      B       b
  14  2005           95      C       b
  15  2005           16      A       c
  16  2005           65      B       c
  17  2005           35      C       c

我想知道每次选举中至少有两个政党获得超过 50 票的地区?所以期望的输出是:

 Region
  a
  b

这两个地区每年至少有两个政党获得 50 票。

我尝试对“选举年”和“投票”进行排序,然后对选举年和地区进行分组,然后查看每个地区的前三名是否获得超过 50 票。但它给出了不同的结果。

df1 = df.sort_values(['Election Year','Votes'], ascending=(True,False))
top_3 = df1.groupby(['Election Year', 'Region']).head(3).reset_index()

如何解决此问题以获得所需的结果?

您可以尝试 groupbyunstack:

>>> ( df.query('Votes >= 50')
        .groupby(['Region', 'Year'])
        .size().unstack('Year')
        .gt(1).all(1).loc[lambda x:x].index )

Index(['a', 'b'], dtype='object', name='Region')

您也可以尝试以下方法:

import pandas as pd
data = {'Election Year':['2000', '2000','2000','2000','2000','2000','2000','2000','2000','2005','2005','2005','2005','2005','2005','2005','2005','2005'],
    'Votes':[50, 100, 70, 26, 180, 100, 120, 46, 80, 129, 46, 95, 60, 23, 95, 16, 65, 35], 
    'Party': ['A', 'B', 'C', 'A', 'B', 'C','A', 'B', 'C','A', 'B', 'C','A', 'B', 'C','A', 'B', 'C'],
    'Region': ['a', 'a', 'a', 'b', 'b', 'b','c', 'c', 'c','a', 'a', 'a', 'b', 'b', 'b','c', 'c', 'c']}
df = pd.DataFrame(data)

x = df.where(df.Votes >= 50).groupby(['Election Year','Region']).count()
x[x.Party >= 2].reset_index().groupby('Region').count()
x = x[x.Party >= 2].reset_index().groupby('Region').count()
x[x['Election Year'] >= 2].index.values

这会给你:

array(['a', 'b'], dtype=object)