python - Pandas Dataframes - 从另一个数据帧的字符串列中的一个数据帧中搜索一个整数
问题描述
我有两个数据框:
DF1
cid dt tm id distance
2 ed032f716995 2021-01-22 16:42:48 43 21.420561
3 16e2fd96f9ca 2021-01-23 23:19:43 539 198.359355
102 cf092e68fa82 2021-01-22 09:03:14 8 39.599627
104 833ccf05433b 2021-01-24 02:53:08 11 33.168314
DF2
id cluster
0 3
1 6 7,8,43
2 20 1817
3 25
4 10 11,13,14,15,9,539
我想id
在. df1
_ 所需的输出是:cluster
df2
cid dt tm id distance cluster
2 ed032f716995 2021-01-22 16:42:48 43 21.420561 7,8,43
3 16e2fd96f9ca 2021-01-23 23:19:43 539 198.359355 11,13,14,15,9,539
102 cf092e68fa82 2021-01-22 09:03:14 8 39.599627 7,8,43
104 833ccf05433b 2021-01-24 02:53:08 11 33.168314 11,13,14,15,9,539
在上面的 df1 - line 1 中,由于 df2 中存在 43,因此我将 df1 - line 1 的整个集群详细信息包括在内。
我尝试了以下方法:
for index, rows in df1.iterrows():
for idx,rws in df2.iterrows():
if (str(rows['id']) in str(rws['cluster'])):
print([rows['id'],rws['cluster']])
这看起来像工作。但是,由于df2['cluster']
是一个字符串,即使有部分匹配,它也会返回结果。例如,如果 df1['id'] = 34 和 df2['cluster'] 有 344,432 等,它仍然基于 344 匹配并返回肯定结果。
我在这里尝试了另一种选择:
d = {k: set(v.split(',')) for k, v in df2.set_index('id')['cluster'].items()}
df1['idc'] = [next(iter([k for k, v in d.items() if set(x).issubset(v)]), '') for x in str(df1['id'])]
但是,在上面我收到一个错误,表明两个数据集之间的变量长度不同。
如何根据 df1 中 id 列的完全匹配来映射集群?
解决方案
一种方法是拆分cluster
, explode
it 和 map:
to_map = (df2.assign(cluster_i=df2.cluster.str.split(','))
.explode('cluster_i').dropna()
.set_index('cluster_i')['cluster']
)
df1['cluster'] = df1['id'].astype(str).map(to_map)
输出:
cid dt tm id distance cluster
2 ed032f716995 2021-01-22 16:42:48 43 21.420561 7,8,43
3 16e2fd96f9ca 2021-01-23 23:19:43 539 198.359355 11,13,14,15,9,539
102 cf092e68fa82 2021-01-22 09:03:14 8 39.599627 7,8,43
104 833ccf05433b 2021-01-24 02:53:08 11 33.168314 11,13,14,15,9,539
推荐阅读
- android - W/BiChannelGoogleApi:[FirebaseAuth:] getGoogleApiForMethod() 返回 Gms:com.google.firebase.auth.api.internal.zzal@b962d36
- android - Google Play OBB 下载器库在 Android 8.0 上崩溃
- opl - 如何在 OPL 中反映 3 维参数的数据
- sql - 查看被 WHERE 子句过滤掉的数据
- javascript - 如何从外部 javascript 调用对象
- c# - 有没有办法生成带有动态内容的可滚动网格布局?
- laravel - 使用集合在 postgresql 的日期字段中插入 null
- html - 如何使您的网站徽标具有响应性?
- javascript - 如何修复包含由“间隔”更改的状态的翻译(React)
- javascript - 通过 XMLHttpRequest 从 file:// URL 向 localhost 发送 GET 时出现 CORS 错误