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

时间:2018-06-13 17:46:36

标签: python pandas dataframe machine-learning data-analysis

我的目标是提取数据框中的行数,其中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,因为那个病人和那一年只有一个月。

1 个答案:

答案 0 :(得分:2)

使用,对您的代码进行以下修改。

df['counts'] = df.groupby(['PatientNumber','year'])["month"].transform('nunique')

transform会返回与原始数据框等长的系列,因此您可以将此系列作为列添加到数据框中。