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

2024-09-28 05:23:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个主数据帧:

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

Tags: 数据timeseqfrq
3条回答
  • ^{}-将master dataframechild dataframeinner join合并。

  • ^{}-删除所有具有FrqSeq列值的duplicate row是重复的,只保留first-row值。

  • ^{}-重置索引或其级别。

例如

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

首先通过^{}删除master中的重复项,然后使用^{}-如果省略参数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

我的方法是分组,让每组中的第一个为子数据帧中的元素建立索引:

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

相关问题 更多 >

    热门问题