如何获取数据帧的子组开始完成索引

df=pd.DataFrame({"C1":['USA','USA','USA','USA','USA','JAPAN','JAPAN','JAPAN','USA','USA'],'C2':['A','B','A','A','A','A','A','A','B','A']})

    C1      C2
0   USA     A
1   USA     B
2   USA     A
3   USA     A
4   USA     A
5   JAPAN   A
6   JAPAN   A
7   JAPAN   A
8   USA     B
9   USA     A

这是我的问题的一个水版本,所以为了简单起见,我的目标是迭代数据帧的一个子组,其中 C2 包含 B。如果 B 在 C2 中 - 我查看 C1 并需要整个组。所以在这个例子中,我看到 USA 并且它从索引 0 开始到 4 结束。另一个是在 8 和 9 之间。

所以我想要的结果是这样的索引:

[[0,4],[8,9]] 

我尝试使用 groupby 但它不起作用,因为它将所有美国组合在一起

my_index = list(df[df['C2']=='B'].index)
my_index

会给 1,8 但如何开始/结束?

回答

这是一种方法,您可以首先屏蔽具有至少 1 的组上的数据帧B,然后获取索引并创建一个辅助列来聚合第一个和最后一个索引值:

s = df['C1'].ne(df['C1'].shift()).cumsum()
i = df.index[s.isin(s[df['C2'].eq("B")])]
p = np.where(np.diff(i)>1)[0]+1
split_ = np.split(i,p)
out = [[i[0],i[-1]] for i in split_]

print(out)
[[0, 4], [8, 9]]


以上是如何获取数据帧的子组开始完成索引的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>