我有一些列表格式的数据: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
...
因此,每个组织都有一个唯一的名称、12个月的数据以及三种规模(小型、中型、大型)中的一种。我已经成功地将这些数据转换为每个组织的时间序列,即。,
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列! 最佳答案
一种方法是在基于大小创建新的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
If you mean to add Size column preset in the dataframe then add that column name to index parameter not columns i.e
df.pivot_table(index=['Name','Size'], columns =['Date'],aggfunc='sum', values =['Figure','Size']).fillna(0).reset_index()
输出:
名称大小图
日期:8月16日7月16日6月16日5月17日
0或1中等8.57 7.55 8.36 9.41
1或2大0.00 11.44 12.12 0.00