我有一些列表格式的数据:150多个组织的数据,每个12个月系列的数字。原始形式看起来像这样:
Name Size Date Figure
Org1 Medium Jun16 8.36
Org1 Medium Jul16 7.55
Org1 Medium Aug16 8.57
...
Org1 Medium May17 9.41
Org2 Large Jun16 12.12
Org2 Large Jul16 11.44
...
因此,每个组织都有一个唯一的名称,十二个月的数据,以及三种尺寸(小,中,大)之一。我已成功地将这些数字转换为每个组织的时间序列,即
Name Jun16 Jul16 Aug16 Sep16 Oct16...
Org1 8.36 7.55 8.57 7.66 9.43
Org2 12.12 11.44 11.01 12.01 10.44...
但我希望包含另一个包含每个组织大小的列。我用于支点的代码是:
dataPivot = dataRaw.pivot_table(index='Name', columns ='Date'],
aggfunc='sum', values = 'Figure').fillna(0)
其中dataRaw
是从.csv读入的原始数据。我已尝试将'Size'
添加到columns
字段,但这只是为每个大小添加了12个列!
答案 0 :(得分:1)
这样做的一种方法是在创建基于大小的新df之后使用concat,即
table = df.pivot_table(index='Name', columns ='Date', aggfunc='sum', values = 'Figure').fillna(0)
size = df.groupby('Name').size().to_frame().rename(columns={0:'size'})
ndf = pd.concat([table,size],1)
基于样本数据的输出:
Aug16 Jul16 Jun16 May17 size Name Org1 8.57 7.55 8.36 9.41 4 Org2 0.00 11.44 12.12 0.00 2
如果您要在数据框中添加“大小”列预设,则将该列名称添加到索引参数而不是列,即
df.pivot_table(index=['Name','Size'], columns =['Date'],aggfunc='sum', values =['Figure','Size']).fillna(0).reset_index()
输出:
Name Size Figure Date Aug16 Jul16 Jun16 May17 0 Org1 Medium 8.57 7.55 8.36 9.41 1 Org2 Large 0.00 11.44 12.12 0.00