我正在使用pandas分析一些选举结果。我有一个DF,Results,其中每个选区有一行,列代表各个政党的选票(超过100个):
In[60]: Results.columns
Out[60]:
Index(['Constituency', 'Region', 'Country', 'ID', 'Type', 'Electorate',
'Total', 'Unnamed: 9', '30-50', 'Above',
...
'WP', 'WRP', 'WVPTFP', 'Yorks', 'Young', 'Zeb', 'Party', 'Votes',
'Share', 'Turnout'],
dtype='object', length=147)
所以...
In[63]: Results.head()
Out[63]:
Constituency Region Country ID Type \
PAID
1 Aberavon Wales Wales W07000049 County
2 Aberconwy Wales Wales W07000058 County
3 Aberdeen North Scotland Scotland S14000001 Burgh
4 Aberdeen South Scotland Scotland S14000002 Burgh
5 Aberdeenshire West & Kincardine Scotland Scotland S14000058 County
Electorate Total Unnamed: 9 30-50 Above ... WP WRP WVPTFP \
PAID ...
1 49821 31523 NaN NaN NaN ... NaN NaN NaN
2 45525 30148 NaN NaN NaN ... NaN NaN NaN
3 67745 43936 NaN NaN NaN ... NaN NaN NaN
4 68056 48551 NaN NaN NaN ... NaN NaN NaN
5 73445 55196 NaN NaN NaN ... NaN NaN NaN
Yorks Young Zeb Party Votes Share Turnout
PAID
1 NaN NaN NaN Lab 15416 0.489040 0.632725
2 NaN NaN NaN Con 12513 0.415052 0.662230
3 NaN NaN NaN SNP 24793 0.564298 0.648550
4 NaN NaN NaN SNP 20221 0.416490 0.713398
5 NaN NaN NaN SNP 22949 0.415773 0.751528
[5 rows x 147 columns]
每个政党的每个选区的结果在Results.ix[:, 'Unnamed: 9': 'Zeb']
列中给出
我可以找到获胜的政党(即获得最高票数的政党)以及它所获得的票数:
RawResults = Results.ix[:, 'Unnamed: 9': 'Zeb']
Results['Party'] = RawResults.idxmax(axis=1)
Results['Votes'] = RawResults.max(axis=1).astype(int)
但是,我还需要知道第二名政党获得了多少选票(最好是它的索引/名称),那么在panda中有没有办法在一组列中为每行返回 * 第二 * 最高值/索引呢?
8条答案
按热度按时间7ajki6be1#
要获取列的最大值,可以使用nlargest():
上面将给予列
High
的2最高值。您也可以使用nsmallest()来获取最低值。
ffscu2ro2#
以下是NumPy的解决方案:
或者作为pandas数据框:
或来自@Divakar的更快解决方案:
4jb9z9bj3#
这里是一个有趣的方法.如果我们用最小值替换最大值并计算.虽然这是一个快速的黑客和,不建议!
tct7dpnv4#
你可以对结果进行排序,这样第一行就包含了最大值,然后你可以简单地使用索引来获得前n个位置。
aor9mmx15#
下面是使用nlargest函数的解决方案:
fkvaft9z6#
hxzsmxv27#
转置并在for循环中使用nlargest来获得每行的结果:
results var是pandas对象的列表,其中列表中的第一项将是df的第一行,按降序排序,依此类推。由于列表中的每个项都是pandas对象,它携带df的列作为索引(它被转置),因此您将获得排序的每行的值和df的列名
nwlqm0z18#
由于排序应用于每一列,索引标签无论如何都会被删除。我们可以使用
numpy
来实现这一点:我们有输出:
这里每一列都是排序的,你可以对矩阵进行切片以获得所需的值。