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
我的 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