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

标签 python pandas

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]]

关于python - 如何获取数据帧的子组开始完成索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67150765/

相关文章:

python 3 : How to best iterate over all lines in a big file (+1 million lines) in a random order

python - 处理 BeautifulSoup CSS 选择器中的冒号

python - 将常量从外部文件导入到 python 中

python - 如何在一台计算机上使用 Python 组合小型 Parquet 文件?

python - 使用 pandas 从 url 读取导入的 csv 文件时出错

python - 我们如何有效地获取列表中所有项目在索引中的序号位置

python - 使用另一个多索引系列屏蔽数据框

python - NumPy 中的高效 3x3 和 2x2 行列式

python - Elasticsearch 未显示字段

python - 拆分字符串值,然后使用 pandas 创建一个新值