![](/img/trans.png)
[英]Pandas Timegrouper on Dataframe using aggregate function count
[英]How to count NA's in aggregate function of a group by using pandas?
我有一個 dataframe 如下圖所示
df = pd.DataFrame(
{'stud_id' : [101, 101, 101, 101,
101, 101, 101, 101],
'sub_code' : ['CSE01', 'CSE01', 'CSE01',
'CSE01', 'CSE02', 'CSE02',
'CSE02', 'CSE02'],
'ques_date' : ['13/11/2020', '10/1/2018','11/11/2017', '27/03/2016',
'13/05/2010', '10/11/2008','11/1/2007', '27/02/2006'],
'resp_date' : [np.nan, '11/1/2018','14/11/2017', '29/03/2016',
np.nan, np.nan,np.nan,'28/02/2006'],
'marks' : [77, 86, 55, 90,
65, 90, 80, 67]}
)
df['ques_date'] = pd.to_datetime(df['ques_date'])
df['resp_date'] = pd.to_datetime(df['resp_date'])
df['date_diff'] = (df['resp_date'] - df['ques_date']).dt.days
我想做以下
a) 對於每個stud_id
和sub_code
組合,獲取 avg date_diff
。
b) 對於每個stud_id
和sub_code
組合,獲取NA
的平均數。 NAs
表示缺乏響應。 例如: stud_id = 101
AND sub_code = CSE01
組合在 4 條記錄中具有 `1 NA,導致 1/4 = 0.25。
我嘗試了以下但不確定如何獲得總計 function 的平均NA
df.groupby(['stud_id','sub_code']).agg(stud_total_records = ('stud_id','count'),
avg_resp_time = ('date_diff','mean'),
lack_resp_pct = (df.groupby(['stud_id','sub_code'])['resp_date'].isna().sum()).reset_index(name='NA_cnt')['NA_cnt']/stud_total_records)
我希望我的 output 如下所示
更新
使用惰性組:
grp = df.groupby(['stud_id', 'sub_code'])
out = grp.agg(stud_total_records = ('stud_id', 'count'),
avg_resp_time = ('date_diff', 'mean'),
lack_resp_pct = ('date_diff', lambda x: sum(x.isna()) / sum(df['date_diff'].isna()))) \
.reset_index()
print(out)
# Output
stud_id sub_code stud_total_records avg_resp_time lack_resp_pct
0 101 CSE01 4 12.0 0.25
1 101 CSE02 4 1.0 0.75
舊答案嘗試:
out = df.groupby(['stud_id','sub_code']).agg(stud_total_records = ('stud_id', 'count'),
avg_resp_time = ('date_diff', 'mean'))
out['lack_resp_pct'] = df[df['date_diff'].isna()].value_counts(['stud_id', 'sub_code'], normalize=True)
Output:
>>> out.reset_index()
stud_id sub_code stud_total_records avg_resp_time lack_resp_pct
0 101 CSE01 4 12.0 0.25
1 101 CSE02 4 1.0 0.75
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.