繁体   English   中英

根据具有共享列的另一个数据帧在数据帧中查找第一次出现的值

[英]Find first occurrence of value in dataframe based on another dataframe with a shared column

提示:本站为国内最大中英文翻译问答网站,提供中英文对照查看,鼠标放在中文字句上可显示英文原文

我试图根据具有相同标识符的另一个数据框的值来查找超过阈值的值的第一次出现。 在下面的示例中,“Trace”列将是相同的标识符。 但是,第二个数据帧仅包含每个“跟踪”编号的一个值。 目标是找到 df1 的“信号”列超过 df2 中“信号”列的 2 倍的第一次出现。 另外,我想将其余信息保留在符合给定条件的行中。

df1 = {"Trace": [1,1,1,1,1,2,2,2,2,2], "Sample": [1,2,3,4,5,1,2,3,4,5], "Signal": [2,3,5,6,1,8,9,5,4,3]}

df2 = {"Trace": [1,2], "Sample": [4,2], "Signal": [2,4]}

例如,在给定的情况下,我想创建一个新的数据框 (df3),其中包含 df2 中“信号”列超出 df2 中原始“信号”列(应该是 4 和 6)的 2 倍的实例。 因此,新数据框 (df3) 将包含 1 和 2 的“跟踪”值、3 和 2 的“样本”值以及 5 和 9 的“信号”值。

有任何想法吗? 我曾尝试使用 .groupby 和 .loc,但我似乎无法得到我想要的。

import pandas as pd

df1 = pd.DataFrame({
    "Trace": [1,1,1,1,1,2,2,2,2,2],
    "Sample": [1,2,3,4,5,1,2,3,4,5],
    "Signal": [2,3,5,6,1,8,9,5,4,3],
})
df2 = pd.DataFrame({
    "Trace": [1,2],
    "Sample": [4,2],
    "Signal": [2,4]},
)

df3 = df1.merge(
    df2[['Trace', 'Signal']],
    on='Trace'
)
mask = (df3.Signal_x > 2 * df3.Signal_y)
df3 = df3.loc[mask]

mask = ~df3.duplicated('Trace')
df3 = df3.loc[mask]

生成的df3应如下所示:

   Trace  Sample    Signal_x    Signal_y
2      1       3           5           2
6      2       2           9           4
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM