根据索引的接近程度拆分熊猫数据框
Posted
技术标签:
【中文标题】根据索引的接近程度拆分熊猫数据框【英文标题】:Split pandas dataframe based on proximity of the index 【发布时间】:2018-03-14 10:32:19 【问题描述】:我有一个大的索引数据框,我想根据它们的索引对其进行分组。数据索引如下:
Index
...
79228
79230
79232
101930
101932
101934
101936
101938
147224
147226
147228
147230
...
应该如何分组:
Index group_id
...
79228 1
79230 1
79232 1
101930 2
101932 2
101934 2
101936 2
101938 2
147224 3
147226 3
147228 3
147230 3
...
一种选择是使用 DataFrame.iterrows() 遍历每一行并比较索引,但这似乎非常低效。有没有一种可以更有效地做到这一点的 pandas 方式?
注意:同一范围内索引的数量和值是随机的,所以我不能这样分组。
数据以大数字分隔。例如一个索引是 80 000,下面是 100 000。
【问题讨论】:
您如何区分索引?你有一个组 id 应该重复的次数吗? 我根据它们之间的距离来区分索引。例如:if (bigger_index -smaller_index 在阅读了所有 cmets 之后,我认为您的问题更多的是关于分组,而不是关于 pandas。 @jpp's answer照顾所有的熊猫,并且大部分可以适应您想要分组的任何简单方法。如果不能通过简单的方法完成,那么您可能需要使用big guns。 【参考方案1】:这是设置容忍度的一种方法。在这里,我们计算底商乘以 100 并进行因式分解。
df['NewIndex'] = (df['Index'].diff() > 100).cumsum() + 1
# Index NewIndex
# 0 1 1
# 1 3 1
# 2 8 1
# 3 1003 2
# 4 1005 2
# 5 1006 2
# 6 3005 3
# 7 3010 3
# 8 3016 3
说明
查找差异高于阈值的行,例如100. 使用pd.Series.cumsum()
将这些标记滚动到组中。
为所需的输出加 1。
【讨论】:
感谢您的回答,但我认为基于商的方法行不通,因为索引值是完全任意的。我更新了问题中的数据以更好地反映这一点。 @M9M5M,我用你的新数据进行了测试。它仍然有效。建议你再更新一次! 如果数据由可预测的数据阈值(例如 100)分隔,则此方法有效,但对于数组 = 199, 200, 201, 333, 334, 335,199 将在不同的组中200 和 201,还是我错过了什么? 像魅力一样工作!感谢您的补充说明。以上是关于根据索引的接近程度拆分熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章