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)
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)
| 归档时间: |
|
| 查看次数: |
3196 次 |
| 最近记录: |