如何基于条件从另一DataFrame为含列表的DataFrame添加最小值?
解决Data2匹配Data1添加value列的问题
先还原示例数据:
import pandas as pd # 构建示例Data1 Data1 = pd.DataFrame({ 'store': [1, 1], 'value': [24, 28], 'month': [1, 2] }) # 构建示例Data2 Data2 = pd.DataFrame({ 'store': [[1,2,3], [2]], 'month': [1, 2] })
解决方案
通过自定义函数结合apply实现需求,逻辑清晰易调试:
def get_min_matched_value(row): # 筛选同月份、且store在当前行store列表中的Data1记录 matched_records = Data1[(Data1['month'] == row['month']) & (Data1['store'].isin(row['store']))] # 有匹配则取最小value,无匹配返回0 return matched_records['value'].min() if not matched_records.empty else 0 # 给Data2新增value列 Data2['value'] = Data2.apply(get_min_matched_value, axis=1)
执行后Data2的结果:
| store | month | value |
|---|---|---|
| [1, 2, 3] | 1 | 24 |
| [2] | 2 | 0 |
补充说明
如果之前用lambda失败,大概率是lambda无法简洁处理空值判断和复杂筛选逻辑,改用自定义函数可以更直观实现逻辑,也方便排查问题。
内容的提问来源于stack exchange,提问作者Alice
相关产品推荐
相关产品推荐

