Python 如何按索引按数据帧分组
现在我有一个数据帧“df”,如下所示: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
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()
——它会给出准确的结果,但可能有一些不同。