我有以下熊猫DataFrame:
df
A B
1 b0
2 a0
3 c0
5 c1
6 a1
7 b1
8 b2以a开头的第一行是
df[df.B.str.startswith("a")]
A B
2 a0我想提取B列中以a开头的第一行,以及之后的每一行。我想要的结果如下
A B
2 a0
3 c0
5 c1
6 a1
7 b1
8 b2如何做到这一点?
发布于 2017-01-31 12:31:58
一种选择是创建蒙版并使用它进行选择:
mask = df.B.str.startswith("a")
mask[~mask] = np.nan
df[mask.fillna(method='ffill').fillna(0).astype(int) == 1]另一种选择是构建索引范围:
first = df[df.B.str.startswith("a")].index[0]
df.ix[first:]后一种方法假设"a“始终存在。
发布于 2017-01-31 12:39:51
如果我没理解错你的问题,下面是你是怎么做的:
df = pd.DataFrame(data={'A':[1,2,3,5,6,7,8],
'B' : ['b0','a0','c0','c1','a1','b1','b2']})
# index of the item beginning with a
index = df[df.B.str.startswith("a")].values.tolist()[0][0]
desired_df = pd.concat([df.A[index-1:],df.B[index-1:]], axis = 1)
print desired_df然后你会得到:

发布于 2017-01-31 14:22:56
使用idxmax查找第一个True
df.loc[df.B.str[0].eq('a').idxmax():]
A B
1 2 a0
2 3 c0
3 5 c1
4 6 a1
5 7 b1
6 8 b2https://stackoverflow.com/questions/41949559
复制相似问题