【发布时间】:2014-10-15 16:57:01
【问题描述】:
我想根据它们在列中的相对排名来删除值。具体来说,我想隔离几列中的 X 最高值和 X 最低值。因此,如果 X=2 并且我的数据框如下所示:
ID Val1 Val2 Val3
001 2 8 14
002 10 15 8
003 3 1 20
004 11 11 7
005 14 4 19
输出应如下所示:
ID Val1 Val2 Val3
001 2 NaN NaN
002 NaN 15 8
003 3 1 20
004 11 11 7
005 14 4 19
我知道我可以使用以下方法制作一个子表来隔离高低等级:
df = df.sort('Column Name')
df2 = df.head(X) # OR: df.tail(X)
我认为我可以使用以下方法清除这些子表中的其他列的值:
df2['Other Column'] = np.NaN
df2['Other Column B'] = np.NaN
然后,当其中一个表中有数据时,以替换 NaN 值的方式将子表重新合并在一起。我试过了:
df2.update(df3) # df3 is a sub-table made the same way as df2 using a different column
仅更新 df2 中已存在的行。
我试过了:
out = pd.merge(df2, df3, how='outer')
当一行出现在 df2 和 d3 中时,它给了我单独的行
我试过了:
out = df2.combine_first(df3)
在某些情况下用找到的 NaN 值覆盖了数值,使其不合适。
必须有办法做到这一点:只要值不在该列中的 X 个最高值或 X 个最低值之列,我想插入带有 NaN 值的原始数据框。
【问题讨论】: