Python 如何按索引按数据帧分组

Python 如何按索引按数据帧分组,python,pandas,Python,Pandas,现在我有一个数据帧“df”,如下所示: 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

现在我有一个数据帧“df”,如下所示:

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     ...
我想用“df.index”来分隔数据帧,如:

然后把这些小的“df”画成一个图形。 我怎样才能做到这一点?
我尝试了“groupby(df.index)”,但结果不是我想要的,它只是将所有相同的索引编号组合在一起

[从评论中迁移]

我对绘图不太了解,但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

[从评论中迁移]

我对绘图不太了解,但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

索引应该是唯一的,所以您的数据帧不是真正有效的。您可能可以对其进行分组,但在其他各种操作中可能会出现错误。我建议用那个索引做一列。好的。谢谢你的建议。我对绘图一无所知,但在接受BrenBarn的建议重置索引后,类似于
df.groupby(((df[“index”]==0)*1.cumsum())
应该可以完成
groupby
方面的工作。@DSM我尝试了你的命令,但似乎不是我想要的,谢谢你:-D@user1843099:好的,当我这样做的时候,就像我说的,
df=df.reset_index()
,它会给出准确的结果,但可能有一些不同。索引应该是唯一的,因此,您的数据帧不是真正有效的。您可能可以对其进行分组,但在其他各种操作中可能会出现错误。我建议用那个索引做一列。好的。谢谢你的建议。我对绘图一无所知,但在接受BrenBarn的建议重置索引后,类似于
df.groupby(((df[“index”]==0)*1.cumsum())
应该可以完成
groupby
方面的工作。@DSM我尝试了你的命令,但似乎不是我想要的,谢谢你:-D@user1843099:好的,当我这样做的时候——正如我所说,
df=df.reset_index()
——它会给出准确的结果,但可能有一些不同。