将DataFrame中的组堆叠在一起

时间:2018-05-16 16:32:07

标签: python pandas dataframe group-by pandas-groupby

我有一个带有重复索引和一列的pandas df:

        value    
1     0.996957  
1     1.098198  
1     1.184518  
2     1.255916  
2     1.312393  

我想要做的是获取具有唯一索引的df,以及每个索引作为列的不同值。 df的最后一列取决于出现次数最多的索引。

因此,对于这个例子,我想要:

       1          2         3
1   0.996957   1.098198  1.184518 
2   1.255916   1.312393    NaN

到目前为止我所做的工作有效,但肯定可以通过索引改进分组,并以某种方式通过群组构建新的df:

data = pd.DataFrame(columns=np.arange(df.groupby(df.index)\
                .count().value.max()))
for i in np.unique(df.index.values):
    data_points_i = pd.DataFrame(df.loc[i,:].value.values).transpose()
    data = pd.concat([data,data_points_i], axis = 0)
data.index = df.index.unique()

其中df是原始df,数据是我最终得到的数据。任何有关优化此代码的帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:3)

void webSocketServerEvent(String webSocketMessage){ this.msg = webSocketMessage; println(msg); } + set_index

unstack

答案 1 :(得分:2)

我的pd.Series再次出现

df.groupby(level=0).value.apply(list).apply(pd.Series)
Out[630]: 
          0         1         2
1  0.996957  1.098198  1.184518
2  1.255916  1.312393       NaN

让我这样做pivot

df.assign(New=df.value.groupby(df.index).cumcount()).reset_index().pivot('index','New','value')
Out[635]: 
New           0         1         2
index                              
1      0.996957  1.098198  1.184518
2      1.255916  1.312393       NaN