[英]Pandas apply labels from df1 to df2 if values are within a range in df1
我有两个数据框,df1 和 df2。 df1 是在范围之间设置的标签表:
Top Bottom Label ID
0 0.0 2.2 A Z-1
1 2.2 6.6 B Z-1
2 6.6 9.1 C Z-1
3 0.0 1.2 A Z-2
4 1.2 4.5 B Z-2
5 6.6 9.1 C Z-2
其中 ID 列与更高阶的分组相关。 df1 和 df2 都包含共享 ID,我想将标签从 df1 应用到 df2。
df2 是定期采样数据的表:
Samp Var ID
0 0.0 157 Z-1
1 0.5 226 Z-1
2 1.5 843 Z-1
3 2.0 999 Z-1
4 2.5 142 Z-1
5 3.0 167 Z-1
6 0.0 157 Z-2
7 0.5 226 Z-2
8 1.5 111 Z-2
9 2.0 666 Z-3
所需的输出如下所示:
Samp Var ID Label
0 0.0 157 Z-1 A
1 0.5 226 Z-1 A
2 1.5 843 Z-1 A
3 2.0 999 Z-1 A
4 2.5 142 Z-1 B
5 3.0 167 Z-1 B
6 0.0 157 Z-2 A
7 0.5 226 Z-2 A
8 1.5 111 Z-2 B
9 2.0 666 Z-3 B
我在寻找其他答案时遇到的问题是我首先需要匹配 ID,然后在顶部和底部列之间的范围内应用标签。 任何帮助,将不胜感激!
这是一种方法 Z-3 不存在于您的参考表中,因此它为空。
想法是在 ID 上合并,然后查询 Samp 在该范围内的那些,然后它只是对结果集的清理
df2.merge(df, on='ID', how='left', suffixes=("","_y")
).query('(Samp>=Top & Samp<=Bottom) | Label.isna()'
).reset_index().drop(
columns=['index','Top','Bottom']
)
Samp Var ID Label
0 0.0 157 Z-1 A
1 0.5 226 Z-1 A
2 1.5 843 Z-1 A
3 2.0 999 Z-1 A
4 2.5 142 Z-1 B
5 3.0 167 Z-1 B
6 0.0 157 Z-2 A
7 0.5 226 Z-2 A
8 1.5 111 Z-2 B
9 2.0 666 Z-3 NaN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.