按首个指定值所在行拆分DataFrame的技术咨询
按指定值首次出现位置拆分DataFrame
刚好碰到过类似的需求,用Pandas几步就能精准实现你要的拆分逻辑——在disease列首次出现"A"的位置把DataFrame切成两部分,最后保留后半段。
先搭好示例数据
先把你给的测试数据转换成Pandas DataFrame:
import pandas as pd data = { 'patid': [3, 99, 4, 1002, 43, 745, 399, 545, 8], 'disease': ['Z', 'B', 'A', 'B', 'A', 'C', 'Z', 'A', 'A'] } df = pd.DataFrame(data)
定位"A"首次出现的位置
我们可以用布尔索引标记所有disease等于"A"的行,再用idxmax()拿到第一个匹配行的索引(因为idxmax会返回第一个True对应的位置,刚好符合“首次出现”的要求):
first_a_index = df['disease'].eq('A').idxmax()
这里得到的first_a_index是2(Pandas用0起始索引,对应第三行)。
拆分并保留目标数据
现在就可以按这个索引拆分了:
- 要丢弃的前半段:
df_discard = df.iloc[:first_a_index](也就是你说的前两行) - 需要保留的后半段:
df_keep = df.iloc[first_a_index:]
直接输出df_keep就是你要的结果:
| patid | disease |
|---|---|
| 4 | A |
| 1002 | B |
| 43 | A |
| 745 | C |
| 399 | Z |
| 545 | A |
| 8 | A |
容错小补充
如果你的数据里可能存在没有"A"的情况,建议加个判断避免报错:
if df['disease'].eq('A').any(): first_a_index = df['disease'].eq('A').idxmax() df_keep = df.iloc[first_a_index:] else: # 根据你的需求处理,比如返回原数据或者提示 df_keep = df
这样就完美覆盖你要的场景啦!
内容的提问来源于stack exchange,提问作者Anthony Nash
相关产品推荐
相关产品推荐

