Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于其他列的特定数量的值获取列值_Python_Pandas_Dataframe_Data Science - Fatal编程技术网

Python 基于其他列的特定数量的值获取列值

Python 基于其他列的特定数量的值获取列值,python,pandas,dataframe,data-science,Python,Pandas,Dataframe,Data Science,我的数据帧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,

我的数据帧
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()

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

您可以尝试使用H
groupby
unstack

>>> ( 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)

谢谢你的回答。在一列中,某些值的字符串位于这些列字符串末尾的括号内。但我只想删除那些带有cerenti字符串的括号。e、 我想保留“ka(A)”,但从“ka(B)”中删除(B)。如何进行这种特殊修剪?@Dpk我想我不明白你的问题。我想最好是问一个新问题,然后提供数据样本和预期输出。但是我想你可以使用
apply
抱歉造成了混乱。我会问一个新问题。事实上,声誉较低的用户不允许经常提问。但谢谢你的建议,尽量减少混乱。