如何在Python中获取非数字数据的总和

如何在Python中获取非数字数据的总和,python,numpy,pandas,dataframe,Python,Numpy,Pandas,Dataframe,我想创建一个汇总表,如下所示: 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 R

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

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)

要获取每组的第一个、最后一个和计数,请执行以下操作:

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
或者,在单独的数据帧中:

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

谢谢,这太好了。但是我如何选择计数
C1
中的项目,并给出列
数据
C2
的第一个和最后一个整数?@Ana请参见上面的修改回复。谢谢@Stefan,这个答案也是正确和干净的。