提问人:grimad 提问时间:10/20/2023 最后编辑:grimad 更新时间:10/20/2023 访问量:39
如何在列表中查找连续组而不是 NaN 值
How to find the groups of consecutives not NaN values in a list
问:
我正在寻找一种过滤方法,可以在列表中找到连续组而不是 NaN 值,并返回这些组的第一个和最后一个元素的索引。
例如,列表
[楠楠, 楠, 4, 63, 34, 楠, 楠, 楠, 234, 3, 楠]
应返回每个组的元组:
[[2,4],[8,9]]
我为 pandas dataFrames 制作了一个有效的函数,但我想知道是否有一个简单的方法:
def find_groups_indexes(db):
groups_indexes = []
for i in range(len(db)-1):
if db.iloc[i].isnull().all()==True and db.iloc[i+1].isnull().all()==False:
subgroup=[i+1]
if db.iloc[i].isnull().all()==False and db.iloc[i+1].isnull().all()==True:
subgroup.append(i)
groups_indexes.append(subgroup)
subgroup=[]
print('\ngroups = ', groups_indexes)
return groups_indexes
答:
0赞
Lucas M. Uriarte
10/20/2023
#1
这应该是做这项工作:
- 首先找到数据不是 nan 的索引
- 然后查找您有多少个组
- 最终获取组的第一个和最后一个值
- if 语句确保仅添加多个 no nan 的序列 值。
短版
data=np.argwhere(~np.isnan(values)).flatten()
[[array[0], array[-1]] for array in np.split(data, np.where(np.diff(data) != 1)[0]+1) if array[0] != array[-1]]
长版:
data=np.argwhere(~np.isnan(values)).flatten()
group_data = np.split(data, np.where(np.diff(data) != 1)[0]+1)
solution = []
for array in group_data:
if array[0] != array[-1]:
indexes = [array[0], array[-1]]
solution.append(indexes)
评论