如何在其他数据框中查找数据框中的行,并获得前两行和后两行的python方法。

问题描述 投票:0回答:1
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行。

python-3.x pandas numpy pandas-groupby
1个回答
3
投票

第一次使用 DataFrame.merge前有 DataFrame.reset_index 为避免丢失原始索引和无参数 on 用于合并所有列名(如有必要,可自由添加)。

然后是转换 indexidx 与连接前后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
© www.soinside.com 2019 - 2024. All rights reserved.