You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Dask实现匹配name值后对DataFrame列应用自定义函数?

在Dask DataFrame中实现匹配行的自定义函数应用

当然可以用Dask实现这个需求。由于Dask DataFrame没有直接对应Pandas的combine方法,我们可以通过**内连接(inner join)**筛选出匹配的行,再应用自定义函数处理对应列。

实现步骤:

  1. 对两个DataFrame按name列做内连接,只保留两边都存在的name记录;
  2. 应用自定义函数处理连接后的val列;
  3. 整理结果列,得到最终输出。

完整代码示例:

import dask.dataframe as dd

# 定义原始Dask DataFrame
control_values = dd.DataFrame({'name': ['V1', 'V2', 'V3', 'V4'],'val':[2,3,5,6]})
values_to_control = dd.DataFrame({'name': ['V2', 'V4'],'val':[29,23]})

# 自定义控制函数
sum_values = lambda s1, s2: s1 + s2

# 1. 内连接筛选匹配的name
merged = values_to_control.merge(control_values, on='name', suffixes=('_src', '_ctrl'))

# 2. 应用自定义函数生成新的val列
result = merged.assign(val=sum_values(merged['val_src'], merged['val_ctrl']))

# 3. 选择需要的列并重置索引
result = result[['name', 'val']].reset_index(drop=True)

# 触发计算(Dask为惰性执行,需compute()获取实际结果)
print(result.compute())

输出结果:

name  val
0   V2   32
1   V4   29

说明:

  • 内连接自动过滤掉不匹配的行,无需额外处理NaN值;
  • 若自定义函数逻辑更复杂(如条件判断、多列运算),只需修改sum_values的实现即可,Dask支持大部分与Pandas兼容的列操作;
  • 调用compute()是因为Dask采用惰性计算模式,只有触发计算才会生成实际结果。

内容的提问来源于stack exchange,提问作者theShadow89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 12:05:13