我的目标是提取数据框中的行数,其中for each PatienNumber and year and month
显示它们的计数,并保留数据框中的所有列。
这是原始数据框:
PatientNumber QT Answer Answerdate year month dayofyear count formula
1 1 transferring No 2017-03-03 2017 3 62 2.0 (1/3)
2 1 preparing food No 2017-03-03 2017 3 62 2.0 (1/3)
3 1 medications Yes 2017-03-03 2017 3 62 1.0 (1/3)
4 2 transferring No 2006-10-05 2006 10 275 3.0 0
5 2 preparing food No 2006-10-05 2006 10 275 3.0 0
6 2 medications No 2006-10-05 2006 10 275 3.0 0
7 2 transferring Yes 2007-4-15 2007 4 105 2.0 2/3
8 2 preparing food Yes 2007-4-15 2007 4 105 2.0 2/3
9 2 medications No 2007-4-15 2007 4 105 1.0 2/3
10 2 transferring Yes 2007-12-15 2007 12 345 1.0 1/3
11 2 preparing food No 2007-12-15 2007 12 345 2.0 1/3
12 2 medications No 2007-12-15 2007 12 345 2.0 1/3
13 2 transferring Yes 2008-10-10 2008 10 280 1.0 (1/3)
14 2 preparing food No 2008-10-10 2008 10 280 2.0 (1/3)
15 2 medications No 2008-10-10 2008 10 280 2.0 (1/3)
16 3 medications No 2008-10-10 2008 12 280 …… ………..
因此所需的输出应与此相同,另外一列显示[patientNumber,year,month]的唯一行。对于patient number=1 shows 1
PatientNumber= 2 shows 1 in year 2006, shows 2 in year 2007
我应用了这段代码:
data=data.groupby(['Clinic Number','year'])["month"].nunique().reset_index(name='counts')
此代码的输出如下:
Clinic Number year **counts**
0 494383 1999 1
1 494383 2000 2
2 494383 2001 1
3 494383 2002 1
4 494383 2003 1
输出计数是正确的,除了它不保留整个字段。我想要完整的列,因为稍后我必须对它们进行一些计算。
然后我尝试了这段代码:
data['counts'] = data.groupby(['Clinic Number','year','month'])['month'].transform('count')
再次它不好,因为它没有显示正确的计数。这段代码的输出是这样的:
Clinic Number Question Text Answer Text ... year month counts
1 3529933 bathing No ... 2011 1 10
2 3529933 dressing No ... 2011 1 10
3 3529933 feeding No ... 2011 1 10
4 3529933 housekeeping No ... 2011 1 10
5 3529933 medications No ... 2011 1 10
这里的计数应该是1
,因为那个病人和那一年只有一个月。
答案 0 :(得分:2)
使用,对您的代码进行以下修改。
df['counts'] = df.groupby(['PatientNumber','year'])["month"].transform('nunique')
transform
会返回与原始数据框等长的系列,因此您可以将此系列作为列添加到数据框中。