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
抱歉造成了混乱。我会问一个新问题。事实上,声誉较低的用户不允许经常提问。但谢谢你的建议,尽量减少混乱。