我有一个像这样的数据框,
df
col1 col2
1 A
2 A
3 A
4 B
5 B
6 A
7 C
8 C
9 C
10 A
11 A
12 A
13 B
14 B
15 A
我想找到除 A 之外的 col2 值的索引,并将其分组在一起并放入列表中。
因此列表将具有除 A 之外的连续出现值的索引
列表看起来像,
[[3,4],[6,7,8],[12,13]]
我可以使用 for 循环来检查上一个和下一个值。但执行时间会很长。我正在寻找 pandas 快捷方式/pythonic 方式来最有效地做到这一点。
最佳答案
想法第一Series.shift
之前的 A
的值,然后按 Series.ne
创建连续的组, shift
为 Series.cumsum
并传递至DataFrame.groupby
与列表
:
s = df['col2'].shift(-1).ffill()
g = s.ne(s.shift()).cumsum()[s != 'A']
out = df['col1'].groupby(g).apply(list).tolist()
print (out)
[[3, 4], [6, 7, 8], [12, 13]]
关于python - 如何对连续出现的 pandas 列值的索引进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59099362/