几个小时以来,我一直在寻找这个问题的答案。我正在使用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 []方法并获得了相同的结果)
答案 0 :(得分:0)
似乎assign()中的“ df”引用是原始数据帧。这将导致为原始数据帧中的每一行构造一行。解决此问题的方法是将过滤后的数据帧分配给一个临时变量,并将其用于assign()。