我有一个包含 5 年数据的数据集。我想创建一个数据框,用于确定每个县满足条件(即第 1 列值 > 10)的行的比例,以及每个县在数据集中的重要性(即行数)。我想每年单独确定这一点,这样结果就可以按年份平均。我已经在下面的代码中完成了一年的数据:
df_2018_1 = df[(df.Year=='2018')]
df_2018_2 = df[(df.column_1 > 10) & (df.Year=='2018')]
df_2018_cur = pd.DataFrame()
df_2018_cur['Column 1 > 10'] = df_2018_2.County.value_counts()/df_2018_1.County.value_counts()*100
# Percent of submissions by county out of all submissions (county importance).
df_2018_cur['PCT of State'] = df_2018_1.County.value_counts()/len(df_2018_1)*100
# Repeat for remaining years, then average across dataframes.
如果可能的话,我希望有一种代码更简洁的替代策略。我不相信
pivot_table()
支持 value_counts()
功能。我想知道 groupby
在这里是否有用,但如果是的话,我还没有想到它会是什么样。
谢谢你。
df['Column1_gt_10'] = df['column_1'] > 10
grouped = df.groupby(['Year', 'County'])
aggregated = grouped.agg(
Column1_gt_10_pct = ('Column1_gt_10', lambda x: x.mean() * 100),
County_count = ('Column1_gt_10', 'size')
total_counts_by_year = df.groupby('Year')['County'].count()
aggregated['PCT_of_State'] = aggregated['County_count'] / aggregated.index.get_level_values('Year').map(total_counts_by_year) * 100
final_result = aggregated.groupby(level='County').mean()
根据我对问题的理解
Year
和 County
column_1>10
的条件