找到满足Pandas标准的最高比例的类别

时间:2014-03-26 22:54:47

标签: python pandas indexing aggregate dataframe

我有一些simple data表格

>>> gerber.head()

  sex   yob  voting  hawthorne  civicduty  neighbors  self  control
0    0  1941       0          0          1          0     0        0
1    1  1947       0          0          1          0     0        0
2    1  1982       1          1          0          0     0        0
3    1  1950       1          1          0          0     0        0
4    0  1951       1          1          0          0     0        0

并且希望找到具有最高选民比例的类别(即布尔值列)(即,类别中voting == 1 的比例最高的那个)。我可以用

做到这一点
gerber.groupby('voting').sum().apply(lambda x: x/x.sum()).iloc[1]

生成一个简单的表

sex          0.309893
yob          0.315449
hawthorne    0.322375
civicduty    0.314538
neighbors    0.377948
self         0.345151
control      0.296638
Name: 1, dtype: float64

我可以检查一下,给我我想要的东西。这是我正在寻找的数据,但必须有(a)更好的方式来表达使用Python和Pandas,以及(b)一种方式只返回类别的名称(这里"邻居"。)

如何使用Pandas在Python中简明扼要地表达这一点?

3 个答案:

答案 0 :(得分:1)

我认为你可以通过使用mean来更直接地做到这一点。另外,我认为不是在每个组中进行groupby而是提取一行,我会使用get_group来获得投票= 1的子组并执行平均值:

df1.groupby('voting').get_group(1).mean()

或者只是为了得到邻居:

df1.groupby('voting').get_group(1)['neighbors'].mean()
# equivalent: df1.groupby('voting')['neighbors'].get_group(1).mean()

要获得最大类别idxmax

df1.groupby('voting').get_group(1).mean().idxmax()

答案 1 :(得分:0)

import pandas as pd
gerber = pd.read_csv('gerber.csv')
max(gerber[gerber.voting == 1].ix[:,3:6])

答案 2 :(得分:0)

我不确定如何考虑yob列的问题。听起来你想要:查看voting==1行,然后仅在这些数据中,计算其他列中1的分数(voting本身除外yob 1}})。然后,您需要识别具有最高分数的列。

我认为这有效:

gerber[gerber['voting']==1].mean().drop(['voting', 'yob']).argmax()