Как отделить каждый индекс от фрейма данных с повторяющимися индексами? - PullRequest
1 голос
/ 20 июня 2020

У меня есть фрейм данных, который выглядит так:

   y
0, 0.3234
0, 0.5234
1, 0.3234
1, 0.7854
1, 0.1863
2, 0.0021

Как видите, есть двойные индексы. когда я обращаюсь по индексу, он возвращает все значения с этим индексом. Поэтому я решил разделить их на основе индексов, таких как y1 с первым значением с индексом 0, первым значением с 1 индексом, первым значением с 2 индексами et c. Аналогично y2 со вторым значением с индексом 0, вторым значением с 1 индексом, вторым значением с индексом 2 et c. Поскольку количество появлений индекса не является постоянным, я хочу, чтобы новые фреймы данных y1, y2, y3, y4 et c до максимума (количество раз, когда индекс встречается для индекса в y.index), и заполните оставшиеся значения с помощью NaNs. Как разделенные кадры данных выглядят так:

y1:

   y1
0, 0.3234
1, 0.3234
2, 0.0021 

y2:

   y2
0, 0.5234
1, 0.7854

y3:

   y3
1, 0.1863

Я пробовал получить доступ с пониманием индекса и alist с [i [0] для i в y.iterrows ()], но это тоже не работает. Любая помощь?

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

Другой способ

df['z']=df.groupby(df.index).cumcount()
y=df[df.z==0]#Select group index 0
y1=df[df.z==1]#Select group index 1
y2=df[df.z==2]#Select group index 2

  print(y.iloc[:,:1:])#Slice out z column used to sort
         y
0,  0.3234
1,  0.3234
2,  0.0021



print(y1.iloc[:,:1:])#Slice out z column used to sort
         y
0,  0.5234
1,  0.7854

print(y2.iloc[:,:1:])#Slice out z column used to sort
      y
1,  0.1863
0 голосов
/ 20 июня 2020

IIU C вам нужно cumcount + конкатенация строк и groupby. мы можем вернуть результаты в dict фреймов данных.

dfs = { k : v.drop('key',1) for k,v in 
   df.assign(key='y' + 
               (df.groupby(level=0).cumcount() + 1).astype(str))\
               .groupby('key')}

print(dfs['y1'])

        y
0  0.3234
1  0.3234
2  0.0021

print(dfs['y2'])

        y
0  0.5234
1  0.7854


print(dfs['y3'])
        y
1  0.1863
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...