首页 > 解决方案 > 如何在 lambda 中运行嵌套循环,其中一个值来自字典,一个键有多个值?

问题描述

我想在 python 中使用 lambda 在数据框中创建一个新列,其中我必须在 dict 上运行一个循环,该循环具有多个键值,并将其与其他变量映射,如果 2 个值是 dict 中的每个值,则在该循环上运行被分配到一个键。

下面是我编写的代码,但无法映射每个 dict 值,而是整个值对

acc['metric'] = acc.apply(lambda x: f'{kind}.{squ.units}.{inv}.{self.name}.{x.label}', axis=1)

所以这里 squ 有键值对,其中单位键在一个点上有多个值。

公制列输出类似于 -

day.{'cde','abc'}.dev.bde.ops
day.{'test','rmp'}.sand.sab.ops

但我希望输出是 -

day.cde.dev.bde.ops
day.abc.dev.bde.ops
day.test.sand.sab.ops
day.rmp.sand.sab.ops
    

有人可以建议如何实现吗?

标签: pythonpython-3.xpandasdataframe

解决方案


您可以遍历 的值squ.units,返回一个列表,然后对 column进行explode()metric

acc['metric'] = acc.apply(lambda x: [f'{kind}.{unit}.{inv}.{self.name}.{x.label}' for unit in squ.units], axis=1)

acc_ = acc.explode('metric')

推荐阅读