比较2个数据框并找到匹配的行

时间:2019-09-27 04:38:02

标签: python python-3.x pandas

我有一个主数据框,如下:

Time          Frq     Seq
12:46:17      4200.0  30700.0
12:49:29      4160.0  30690.0
12:46:18      3060.0  30700.0
12:46:18      3060.0  30700.0
12:46:19      3060.0  30700.0
12:46:20      3060.0  30700.0
12:46:20      4240.0  30700.0
12:46:19      4220.0  30700.0
12:46:18      4200.0  30700.0
12:46:18      4200.0  30700.0
12:46:38      3060.0  30700.0
12:43:04      4620.0  30701.0
12:46:38      4600.0  30701.0
12:46:05      4600.0  30701.0
12:46:37      3060.0  30700.0
12:48:35      3020.0  30690.0

,子数据框为:

Frq     Seq
3060.0  30700.0
4600.0  30701.0

我想在主数据框中收集第一次出现的子数据框行。

我希望结果数据框为:

Time          Frq     Seq
12:46:18      3060.0  30700.0
12:46:38      4600.0  30701.0

3 个答案:

答案 0 :(得分:1)

首先通过DataFrame.drop_duplicates删除在master中重复的内容,然后使用DataFrame.merge-如果省略参数on,则它通过两个DataFrame之间的列名交集合并:

df = master.drop_duplicates(['Frq','Seq']).merge(child)
print (df)
       Time     Frq      Seq
0  12:46:18  3060.0  30700.0
1  12:46:38  4600.0  30701.0

答案 1 :(得分:0)

我的方法是分组以获取每个组的第一个,然后为子数据框中的元素建立索引:

first = master.groupby('Frq', as_index=False).first()
first[first.Frq.isin(child.Frq)]

#       Frq      Time      Seq
# 1  3060.0  12:46:18  30700.0
# 6  4600.0  12:46:38  30701.0

答案 2 :(得分:0)

  • pd.merge()-将master dataframechild dataframeinner join合并。

  • .drop_duplicate()-删除所有具有duplicate rowFrq列值的Seq重复,并且仅保留first-row值。

  • df.reset_index()-重置索引或索引的级别。

例如。

df = master.merge(child, on=['Frq','Seq'],
     how='inner').drop_duplicates(['Frq','Seq'],keep= 'first').reset_index(drop=True)
print(df)

       Time     Frq      Seq
0  12:46:18  3060.0  30700.0
1  12:46:38  4600.0  30701.0