如何应用唯一函数并在数据框熊猫中转换和保留完整的列



我的目标是提取数据框中的行数,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返回与原始数据帧长度相等的序列,因此您可以将此序列作为列添加到数据帧中。

最新更新