【发布时间】:2020-06-26 23:14:10
【问题描述】:
我正在使用具有多个组的 pandas 数据框:
date | group | brand | calculated_value
_______________________________
5 | 1 | x | 1
6 | 1 | x | NaN
7 | 1 | x | NaN
5 | 2 | y | 1
6 | 2 | y | NaN
在每个日期、组和品牌中,我都使用计算值初始化了第一个实例。我正在使用嵌套的 for 循环遍历这些,以便我可以更新和分配计算值的下一个连续日期出现(在 date-group-brand 内)。
groupby()/apply() 范式对我不起作用,因为在例如上面的第三行,传递给 apply() 的函数在上面查找并找到 NaN。这不是顺序更新。
计算值后,我尝试将其分配给有问题的单元格,使用正确的语法来避免 CopySettings 问题:
df.loc[ (df.date == 5) & (df.group == 1) & (df.brand == 'x'), "calculated_value" ] = calc_value
但是,这无法设置单元格,它仍然是 NaN。这是为什么?我尝试搜索了许多术语,但找不到与我的案例相关的答案。
我已确认每个 for 循环都在正确递增,并且我在每次迭代中处理了正确的行。
编辑:我发现了问题。当我将单元格作为单独的参数传递给 calculate_function 时,它们每个都作为单值系列传递,并且该函数返回一个单值系列,不能将其分配给 NaN 单元格。不匹配的赋值没有抛出错误,for 循环也没有终止。
我通过传递解决了这个问题
calculate_function(arg1.values[0], arg2.values[0], ...)
提取值数组并获取其第一个索引似乎不优雅且脆弱,但与我在 R 中习惯的行为相比,默认行为是一种古怪的行为。
【问题讨论】:
标签: pandas dataframe for-loop nested