我想创建一个汇总表,如下所示:
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)
答案 0 :(得分: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
或,在单独的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
答案 1 :(得分:1)
您还可以并排查看日期和列:
>>> (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