寻找大Pandas中符合标准比例最高的类群

2024-06-08 08:08:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些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中简洁地表达这一点?你知道吗


Tags: 方法selfpandasneighborssimple类别control比例
3条回答

我想你可以用“平均”来更直接地做到这一点。另外,我认为,与其对每个组进行groupby,然后提取一行,不如使用get\u 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()

我不知道如何思考你在yob专栏的问题。听起来您想:查看voting==1所在的行,然后仅在这些数据中,计算其他列中1的分数(不包括voting本身和yob)。然后您需要标识分数最高的列。你知道吗

我认为这是可行的:

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

相关问题 更多 >