Python中非数值数据求和的方法

2024-04-16 22:23:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个汇总表,如下所示:

A=
ID    Date      C1    C2
X     12/01/15  A     House
X     18/04/15  B     Rent
X     21/08/15  A     Rent
Y     01/08/15  C     Rent
Y     21/12/15  C     House

B=
ID    C1    C2     Data
X     3     House  12/01/15
Y     2     Rent   01/08/15

C=
ID    C1    C2    Date
X     3     Rent  21/08/15
Y     2     House 21/12/15

它所做的是,对于每个ID,它统计数据项(行)的数量,在B中,在C2列下放入第一个条目,在C中放入最后一个条目。你知道吗

我可以使用groupby函数获取计数,但不知道如何生成C2列。你知道吗

B = pd.DataFrame(A.groupby('ID', sort = False).count().ix[:, 1:]).reset_index(level=1)

Tags: 函数iddata数量date条目housepd
2条回答

要获得每组的第一个、最后一个和计数:

grp = df.groupby('ID')
pd.concat([grp.first(), grp.last(), grp.size()], axis=1)

        Date C1     C2      Date C1     C2  0
ID                                           
X   12/01/15  A  House  21/08/15  A   Rent  3
Y   01/08/15  C   Rent  21/12/15  C  House  2

或者,在单独的DataFrames中:

grp.first().join(grp.size().to_frame())

        Date C1     C2  0
ID                       
X   12/01/15  A  House  3
Y   01/08/15  C   Rent  2

grp.last().join(grp.size().to_frame())

        Date C1     C2  0
ID                       
X   21/08/15  A   Rent  3
Y   21/12/15  C  House  2

您还可以并排查看日期和列:

>>> (gb.first()
     .join(gb.last(), lsuffix='_first', rsuffix='_last'))
     .join(gb.C1.agg({'C1_count': 'count'}))

   Date_first C1_first C2_first Date_last C1_last C2_last  C1_count
ID                                                                 
X    12/01/15        A    House  21/08/15       A    Rent         3
Y    01/08/15        C     Rent  21/12/15       C   House         2

相关问题 更多 >