浏览和选择2个数据帧

时间:2018-04-18 09:20:59

标签: python pandas dataframe

假设我有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 

2 个答案:

答案 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])