我的目标是提取数据框中的行数,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
因为对于那个病人和那一年只有一个月。
使用对代码的以下修改。
df['counts'] = df.groupby(['PatientNumber','year'])["month"].transform('nunique')
transform
返回与原始数据帧长度相等的序列,因此您可以将此序列作为列添加到数据帧中。