我有一些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中简明扼要地表达这一点?
答案 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()