【问题标题】:Sorting a dataset based on 2 columns & computing averages of sub-datasets based on the 2 columns' contents根据 2 列对数据集进行排序并根据 2 列的内容计算子数据集的平均值
【发布时间】:2022-12-06 01:43:09
【问题描述】:
我有一个数据集,详细说明了不同州的投票数据以及该州投票给 DEM 或 REP 的人数百分比。
What my data frame looks like:
我本质上是想找出 X 州投票支持 DEM 或 REP 的人的平均百分比。所以我的输出是这样的:
新罕布什尔州 |数据元 | 55%
新罕布什尔州 |代表 | 45%
缅因州 |数据元 | 45%
缅因州 |代表 | 54%
等等
我最初想到的是简单地遍历整个数据集,并为每个州的 DEM 百分比或 REP 百分比分配新的 pct 变量,但我觉得那是低效的。
我正在考虑对数据进行排序,使其具有 state1、DEM |状态 1,REP |状态 2,DEM | state3、REP 等,然后求平均值。但是我对 pandas 不太熟悉(这是我正在尝试使用的)。也许有人可以指出我正确的方向。
【问题讨论】:
标签:
python
pandas
dataframe
【解决方案1】:
IIUC,使用 pandas.concat 和 GroupBy.mean :
cols = ["state", "party"]
(
pd.concat([df_house, df_senate],
ignore_index=True)
.groupby(cols, as_index=False)
.mean(numeric_only=True)
.sort_values(by=cols)
)
这将返回一个 (pandas.core.frame.DataFrame),您可以将其分配给一个变量:
df_average = pd.concat([df_house, df_senate], ignore_index=True).groupby(cols, as_index=False).mean(numeric_only=True).sort_values(by=cols)
【解决方案2】:
尝试使用
df.groupby(['state','party'])['pct'].mean()