Pandas数据帧按列表值过滤 - 效率最高

时间:2015-03-18 23:16:39

标签: python pandas dataframe

我有跟随我构建的pandas数据框:

      dark  Mystery  adult  crime  action  comedy  cartoon  winter  snow  skiing
0001  0.00    0.000  0.000   0.00    0.00   0.000     0.00    0.56  0.65   0.789
0004  0.89    0.678 -0.423   0.12    0.00   0.000     0.00    0.00  0.00   0.000
0005  0.00    0.000  0.000   0.00    0.12   0.678    -0.89    0.00  0.00   0.000

我还有一个列表,其中包含数据框的一些行索引值。过滤后,我希望我的新数据框的索引与列表中的值匹配。

l = [001,005]

这是我试图找出的大数据框,没有迭代通过循环。

[df.index[idx] for idx in l]

这是错的,但我觉得我接近答案或者可能不是。

结果应该是:

      dark  Mystery  adult  crime  action  comedy  cartoon  winter  snow  skiing
0001  0.00    0.000  0.000   0.00    0.00   0.000     0.00    0.56  0.65   0.789
0005  0.00    0.000  0.000   0.00    0.12   0.678    -0.89    0.00  0.00   0.000

2 个答案:

答案 0 :(得分:3)

如何使用.loc

df.loc[l]

注意,在您的实际示例中,您的索引可能是字符串而不是整数。当您声明l = [0001, 0005]时,它将被评估为[1,5]。因此,您可能希望使用l = ["0001", "0005"]或使用字符串格式转换整数(正如Jonathan Eunice在其答案中所示)。

除此之外,you should also avoid using lowercase l as a variable name,因为它看起来与许多等宽字体中的1类似。

答案 1 :(得分:1)

如果您的DataFrame位于df

newdf = df[df.index.isin(l)]

当然,你必须要小心。 l中的所有项目都不是真正的索引。 l = [001,005]l = [1,5]相同,而您的索引实际上是字符串la ['0001', '0002', ...]。鉴于此,您可能希望升级"您的选择列表l首先与您的索引并行:

l = ["{:04d}".format(i) for i in l ]
newdf = df[df.index.isin(l)]