我有一些列表格式的数据: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

10-04 21:46
查看更多