Группы стека в DataFrame друг над другом - PullRequest
0 голосов
/ 16 мая 2018

У меня есть 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 голосов
/ 16 мая 2018

set_index + 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
0 голосов
/ 16 мая 2018

Мой 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...