如何在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,这个答案也是正确和干净的。