dataframe1=pd.DataFrame({'x1':[5],'x2':[5],'time':[12/7/2019 9:14]})
dataframe2=pd.DataFrame({'x1':[5,3,4,6],'x2':[5,5,6,7],'time':[12/7/2019
9:18,12/7/2019 9:14,12/7/2019 9:16,12/7/2019 9:17]})
当两个数据框的三列中的值匹配时,从这两个数据框中获取行索引,获取索引后在新的数据框中获取索引前的2行和索引后的2行。
第一次使用 DataFrame.merge
前有 DataFrame.reset_index
为避免丢失原始索引和无参数 on
用于合并所有列名(如有必要,可自由添加)。
然后是转换 index
到 idx
与连接前后2个索引值与 numpy.r_
和 Index.intersection
移除原值 dataframe2.index
最后选择 DataFrame.loc
:
dataframe1=pd.DataFrame({'x1':[5],'x2':[5],'time':['12/7/2019 9:14']})
dataframe2=pd.DataFrame({'x1':[5,5,4,6],'x2':[5,5,6,7],
'time':['12/7/2019 9:18','12/7/2019 9:14',
'12/7/2019 9:16','12/7/2019 9:17']})
print (dataframe1)
print (dataframe2)
x1 x2 time
0 5 5 12/7/2019 9:18
1 5 5 12/7/2019 9:14 <- changed for match
2 4 6 12/7/2019 9:16
3 6 7 12/7/2019 9:17
idx = dataframe2.reset_index().merge(dataframe1).set_index('index').index
print (idx)
Int64Index([1], dtype='int64', name='index')
N = 2
s = [x for s, e in zip(idx-N,idx) for x in range(s, e+1)]
e = [x for s, e in zip(idx,idx+N) for x in range(s, e+1)]
idx = dataframe2.index.intersection(set(s+e))
print (idx)
Int64Index([0, 1, 2, 3], dtype='int64')
df = dataframe2.loc[idx]
print (df)
x1 x2 time
0 5 5 12/7/2019 9:18
1 5 5 12/7/2019 9:14
2 4 6 12/7/2019 9:16
3 6 7 12/7/2019 9:17