假设我有2个这样的DataFrame:
df1
Id B
3 alpha 1
18 alpha 3
125 alpha 5
230 alpha 9
其中3, 18, 125, 230
是df1的索引
和:
df2
Id B
1 Beta 21
2 Beta 33
5 Beta 120
7 Beta 36
10 Beta 32
14 Beta 71
15 Beta 210
21 Beta 53
123 Beta 22
127 Beta 1227
128 Beta 11
227 Beta 7
235 Beta 18
我的问题: 如何浏览我的df2以根据索引提取df1每行之前和之后的行?
我想要的输出:
df2
Id B
2 Beta 33
5 Beta 120
15 Beta 210
21 Beta 53
123 Beta 22
127 Beta 1227
227 Beta 7
235 Beta 18
答案 0 :(得分:3)
使用searchsorted
作为职位,添加一个以前的值,按numpy.r_
加入并按iloc
选择:
a = df2.index.searchsorted(df1.index)
df = df2.iloc[sorted(np.r_[a, a-1])]
print (df)
Id B
2 Beta 33
5 Beta 120
15 Beta 210
21 Beta 53
123 Beta 22
127 Beta 1227
227 Beta 7
235 Beta 18
答案 1 :(得分:1)
更简洁的方法是从df1
和加减1获取索引的位置。
df = pd.concat([df1, df2]).sort_index()
li = []
for ind in df1.index:
ind_loc = df.index.get_loc(ind)
li.extend([ind_loc - 1, ind_loc + 1])
print(df.iloc[li])