gpt4 book ai didi

python - Pandas :返回值的第一个实例和最后一个实例的索引值

转载 作者:行者123 更新时间:2023-11-28 20:59:02 26 4
gpt4 key购买 nike

我有以下数据框:

df = pd.DataFrame({'index':[0,1,2,3,4,5,6,7,8,9,10], 'X':[0,0,1,1,0,0,1,1,1,0,0]})
df.set_index('index', inplace = True)

X
index
0 0
1 0
2 1
3 1
4 0
5 0
6 1
7 1
8 1
9 0
10 0

我需要的是返回一个元组列表,显示每个 1 序列的 1 的第一个和最后一个实例的索引值(抱歉,如果这令人困惑)。即

想要:

[(2,3), (6,8)]

第一个 1 的第一个实例出现在索引点 2,然后该序列中的最后一个 1 出现在索引点 3。下一个 1 出现在索引点 6,该序列中的最后一个 1 出现在索引点 8 .

我尝试过的:

我可以使用 numpy 的 argmax 函数获取第一个。即

x1 = np.argmax(df.values)
y1 = np.argmin(df.values[x1:])
(x1,2 + y1 - 1)

这会给我第一个元组,但遍历看起来很乱,我觉得有更好的方法。

最佳答案

你需要more_itertools.consecutive_groups

import more_itertools as mit
def find_ranges(iterable):
"""Yield range of consecutive numbers."""
for group in mit.consecutive_groups(iterable):
group = list(group)
if len(group) == 1:
yield group[0]
else:
yield group[0], group[-1]
list(find_ranges(df['X'][df['X']==1].index))

输出:

[(2, 3), (6, 8)]

关于python - Pandas :返回值的第一个实例和最后一个实例的索引值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50517818/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com