2013-05-07 3 views
1

Теперь у меня есть DataFrame "ДФ", как показано ниже:как GroupBy с DataFrame индексом

In [28]: df[:100] 
Out[28]: 
     distkm  modlat  modlon reallat reallon   time 
0 9.325590 42.423024 -70.512309 42.5040 -70.5419 731800.5514 
1 9.286476 42.416112 -70.519175 42.4956 -70.5539 731800.6319 
0 4.456535 42.423877 -70.408784 42.4292 -70.4626 731802.0660 
1 6.393979 42.405980 -70.367245 42.4297 -70.4382 731802.1556 
2 7.447289 42.389719 -70.343267 42.4259 -70.4196 731802.2312 
0 4.456535 42.423877 -70.408784 42.4292 -70.4626 731802.0660 
1 6.393979 42.405980 -70.367245 42.4297 -70.4382 731802.1556 
2 7.447289 42.389719 -70.343267 42.4259 -70.4196 731802.2312 
3 7.329755 42.370420 -70.340029 42.4134 -70.4077 731802.3208 
4 6.817408 42.355624 -70.337595 42.3942 -70.4021 731802.3972 
0  ... 
1  ... 

Я хочу, чтобы отделить DataFrame от "df.index", как:

 distkm  modlat  modlon reallat reallon   time 
0 9.325590 42.423024 -70.512309 42.5040 -70.5419 731800.5514 
1 9.286476 42.416112 -70.519175 42.4956 -70.5539 731800.6319 
    distkm modlat  modlon reallat reallon   time 
0 4.456535 42.423877 -70.408784 42.4292 -70.4626 731802.0660 
1 6.393979 42.405980 -70.367245 42.4297 -70.4382 731802.1556 
2 7.447289 42.389719 -70.343267 42.4259 -70.4196 731802.2312 
    distkm modlat  modlon reallat reallon   time 
0 4.456535 42.423877 -70.408784 42.4292 -70.4626 731802.0660 
1 6.393979 42.405980 -70.367245 42.4297 -70.4382 731802.1556 
2 7.447289 42.389719 -70.343267 42.4259 -70.4196 731802.2312 
3 7.329755 42.370420 -70.340029 42.4134 -70.4077 731802.3208 
4 6.817408 42.355624 -70.337595 42.3942 -70.4021 731802.3972 

и затем нарисуйте эти маленькие «df» как фигуры. Как я могу подойти к этому? Я пробовал «groupby (df.index)», но результат не то, что я хочу, он просто объединяет один и тот же номер индекса.

+0

Индексы должны быть ип ique, поэтому ваш DataFrame действительно недействителен. Вы можете сгруппировать его, но вы, вероятно, получите ошибки для различных других операций. Я бы предложил сделать столбец из этого индекса. – BrenBarn

+0

OK.Спасибо за ваш совет. – wuwucat

+0

Я ничего не знаю о заговоре, но после принятия рекомендации BrenBarn о сбросе индекса, что-то вроде 'df.groupby (((df [" index "] == 0) * 1) .cumsum())' должен работать делать «групповую» сторону вещей. – DSM

ответ

1

[мигрировал из комментариев]

я не знаю много о заговоре, но ISTM вы можете использовать groupby так, как вы хотите [NB: это предполагает, что индекс состоит из целых чисел, а не строки - заменить 0 по '0', если я ошибаюсь]:

>>> grouped = df.reset_index().groupby(((df.index == 0)*1).cumsum()) 
>>> for n,g in grouped: 
...  print g 
...  
    index distkm  modlat  modlon reallat reallon   time 
0  0 9.325590 42.423024 -70.512309 42.5040 -70.5419 731800.5514 
1  1 9.286476 42.416112 -70.519175 42.4956 -70.5539 731800.6319 
    index distkm  modlat  modlon reallat reallon   time 
2  0 4.456535 42.423877 -70.408784 42.4292 -70.4626 731802.0660 
3  1 6.393979 42.405980 -70.367245 42.4297 -70.4382 731802.1556 
4  2 7.447289 42.389719 -70.343267 42.4259 -70.4196 731802.2312 
    index distkm  modlat  modlon reallat reallon   time 
5  0 4.456535 42.423877 -70.408784 42.4292 -70.4626 731802.0660 
6  1 6.393979 42.405980 -70.367245 42.4297 -70.4382 731802.1556 
7  2 7.447289 42.389719 -70.343267 42.4259 -70.4196 731802.2312 
8  3 7.329755 42.370420 -70.340029 42.4134 -70.4077 731802.3208 
9  4 6.817408 42.355624 -70.337595 42.3942 -70.4021 731802.3972 

и для каждой группы мы можем установить индекс снова, например:

>>> g.set_index("index") 
     distkm  modlat  modlon reallat reallon   time 
index                
0  4.456535 42.423877 -70.408784 42.4292 -70.4626 731802.0660 
1  6.393979 42.405980 -70.367245 42.4297 -70.4382 731802.1556 
2  7.447289 42.389719 -70.343267 42.4259 -70.4196 731802.2312 
3  7.329755 42.370420 -70.340029 42.4134 -70.4077 731802.3208 
4  6.817408 42.355624 -70.337595 42.3942 -70.4021 731802.3972 
+0

Спасибо ~ Это круто: D – wuwucat

Смежные вопросы