Skip to main content
 首页 » 编程设计

python之将 DataFrame 中的组堆叠在一起

2025年05月04日22mengfanrong

我有一个带有重复索引和单列的 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,而 data 是我最终得到的。如果您能帮助优化这段代码,我们将不胜感激。

请您参考如下方法:

设置索引 + unstack

df.set_index(df.groupby(level=0).cumcount(), append=True).unstack()['value'] 
               
          0         1         2 
1  0.996957  1.098198  1.184518 
2  1.255916  1.312393       NaN