面板数据:平均值、分组和有条件

2024-06-01 07:36:08 发布

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

我想先计算作业的平均值,然后再计算作业的平均值。你知道吗

id  year  entry  cohort  jobs  year_of_life
1  2009    0     NaN      10      NaN
1  2012    1     2012     12      0
1  2013    0     2012     12      1
1  2014    0     2012     13      2
2  2010    1     2010     2       0
2  2011    0     2010     3       1
2  2012    0     2010     3       2
3  2007    0     NaN      4       Nan
3  2008    0     NaN      4       Nan
3  2012    1     2012     5       0
3  2013    0     2012     5       1

非常感谢


Tags: ofid作业jobsnanyear平均值cohort
2条回答

满足您的第一个要求-

df.query('entry == 1').jobs.mean()
6.333333333333333

在这里,我只考虑entry1的作业。你知道吗

df.assign(jobs=df.jobs.mask(df.entry == 1)).groupby('year_of_life').jobs.mean()

year_of_life
0           NaN
1      6.666667
2      8.000000
Nan    4.000000
Name: jobs, dtype: float64

如果您只想通过year_of_life来表示,一个简单的groupby就足够了。你知道吗

df.groupby('year_of_life').jobs.mean()

year_of_life
0      6.333333
1      6.666667
2      8.000000
Nan    4.000000
Name: jobs, dtype: float64

请注意,这与另一个答案的建议不同,我认为这不是您想要的:

df.query('entry == 1').groupby('year_of_life').jobs.mean()

year_of_life
0    6.333333
Name: jobs, dtype: float64

首先,您可以使用布尔索引来过滤数据帧中条件为真的行,然后取平均值df[df.entry == 1].mean()。对于第二种情况,按生命年分组,然后取每组的平均值。如果您想同时满足这两个条件,那么进行分组尝试df[df.entry == 1].groupby('year_of_life').mean()。你知道吗

相关问题 更多 >