Python 按相对于列的最低值合并

Python Merge By Lowest Value Relative to Column

我的 df:

df_val
0.1
0.3
0.4
0.7

要加入聚类的数据集是:

cl_val cluster
0.2       A
0.5       B
0.8       C

我想加入集群,这样对于 df 中的每一行,它都与 df_val 下面的集群相匹配。即对于第一行 (0.1) 最小的 cl_val 它小于 0.2 所以簇 A。对于行 2 (0.3) 最小的簇 val 它小于 0.5,所以簇 B。例如结束我想要的结果是:

df_val cluster
0.1       A
0.3       B
0.4       B
0.7       C

知道如何在 Python 中完成这项工作吗?也许使用 sql?

试试这个:

设置

df_vals = pd.DataFrame({'df_val': [0.1, 0.3, 0.4, 0.7]})
clusters = pd.DataFrame({'cl_val': [0.2, 0.5, 0.8], 'cluster': ['A','B','C']})

合并

merge_df = pd.merge_asof(df_vals, clusters, left_on='df_val', right_on='cl_val', direction='forward')
merge_df[['df_val', 'cluster']]

输出

    df_val  cluster
0   0.1     A
1   0.3     B
2   0.4     B
3   0.7     C

另一次尝试:

import pandas as pd

df = pd.DataFrame({'df_val':[0.1, 0.3,0.4,0.7]})
dc = pd.DataFrame({'cl_val':[0.2,0.5,0.8], 'cluster':['A','B','C']})

df['cluster']  = df['df_val'].apply(lambda x: dc.iloc[(dc['cl_val'] > x).idxmax()]['cluster'])
print(df)

打印:

   df_val cluster
0     0.1       A
1     0.3       B
2     0.4       B
3     0.7       C