Pandas'isin'具有输入保持顺序的输入列表

Nik*_*ita 12 python numpy dataframe pandas

当我有一个数据帧

df = DataFrame({'A': [5, 6, 3, 4], 'B': [1, 2, 3, 5]})
df

   A  B
0  5  1
1  6  2
2  3  3
3  4  5
Run Code Online (Sandbox Code Playgroud)

我可以用

df[df['A'].isin([3, 6])]
Run Code Online (Sandbox Code Playgroud)

为了选择具有传递值的行.

还有一种方法可以保持输入列表的顺序吗?

所以我的输出不是:

   A  B
1  6  2
2  3  3
Run Code Online (Sandbox Code Playgroud)

   A  B
1  3  3
2  6  2
Run Code Online (Sandbox Code Playgroud)

小智 6

这个问题有点老了,但我偶然发现必须这样做。这就是我解决问题的方法。我相信这是一个非常通用且简单的解决方案,尚未在这里提出,并且实际上没有使用该isin()方法:

df.set_index('A').loc[[3,6]].reset_index()
Run Code Online (Sandbox Code Playgroud)

根据提供的示例:

>>> df = pd.DataFrame({'A': [5, 6, 3, 4], 'B': [1, 2, 3, 5]})
>>> df.set_index('A').loc[[3,6]].reset_index()
   A  B
0  3  3
1  6  2
Run Code Online (Sandbox Code Playgroud)

当然,这样做有一个缺点,就是丢失了原来的索引。要保留索引,您还可以:

>>> df.reset_index().set_index('A').loc[[3,6]].reset_index().set_index('index')
       A  B
index      
2      3  3
1      6  2
Run Code Online (Sandbox Code Playgroud)

  • 这个答案正是我正在寻找的!完美的。 (2认同)

Jef*_*eff 0

isin是一个集合操作,pandas 对齐输入,因此输入集合的顺序通常与参考帧的顺序相同

如果你真的想这样做,你可以:

In [15]: df.take(df['A'][df['A'].isin([3,6])].order().index)
Out[15]: 
   A  B
2  3  3
1  6  2

[2 rows x 2 columns]
Run Code Online (Sandbox Code Playgroud)