我有跟随我构建的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
答案 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)]