为什么Pandas dataframe.query-> Assign返回原始数据集大小?

时间:2018-11-01 18:48:32

标签: python-3.x pandas

几个小时以来,我一直在寻找这个问题的答案。我正在使用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 []方法并获得了相同的结果)

1 个答案:

答案 0 :(得分:0)

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