首页 > 解决方案 > 为什么 pandas dataframe.query -> assign 返回原始数据集大小?

问题描述

几个小时以来,我一直在寻找这个问题的答案。我正在使用 python 3.6.7 和 pandas 0.23.4。我正在尝试使用 query() 从数据框中获取行的子集,然后将其他列添加到该子集中。以下是代码片段:

df.query(f'({column}_c != {column}_c) & ({column}_t == {column}_t)')
                       .assign(reason='Calculated has value but target does not',
                               name=column,
                               calced=df[column + '_c'],
                               targeted=df[column + '_t'])

原始数据帧大约有 29K 行,当我只运行这个链的查询部分时,我得到 0 行。但是,在 assign() 之后,我又多了 29K 行。我认为 query() 复制了数据框,所以我不希望出现这种行为。任何人都知道发生了什么(我也尝试过 df[] 方法,结果相同)

标签: python-3.xpandas

解决方案


看来 assign() 中的“df”引用是原始数据帧。它将导致为原始数据框中的每一行构建一行。解决这个问题的方法是将过滤后的数据帧分配给一个临时变量并将其用于assign()。


推荐阅读