擅长:python、mysql、java
<p>是的,以下是如何比较数据帧中的整行:</p>
<pre><code>df[(df == x).all(axis=1)].index # where x is the pd.Series we're comparing to
</code></pre>
<p>此外,如果您在读取CSV时直接将<code>name</code>设置为索引列,则会使生活变得最简单</p>
<pre><code>import pandas as pd
from io import StringIO
df = """\
name,match1,match2,match3
Alice,2,4,3
Bob,2,3,4
Charlie,1,0,4"""
df = pd.read_csv(StringIO(df), index_col='name')
x = pd.Series({'match1':1, 'match2':0, 'match3':4})
</code></pre>
<p>现在您可以看到,执行<code>df == x</code>或等效的<code>df.eq(x)</code>并不是您想要的,因为它执行元素级比较并返回一行True/False。因此,您需要使用<code>.all(axis=1)</code>来聚合这些行,这将发现所有比较结果都是<code>True</code>的行</p>
<pre><code>df.eq(x).all(axis=1)
df[ (df == x).all(axis=1) ]
# match1 match2 match3
# name
# Charlie 1 0 4
</code></pre>
<p>…最后,因为您只需要这些行的<code>name</code>:</p>
<pre><code>df[ (df == x).all(axis=1) ].index
# Index(['Charlie'], dtype='object', name='name')
df[ (df == x).all(axis=1) ].index.tolist()
# ['Charlie']
</code></pre>
<p>这正是你想要的。(为了清晰起见,我只在表达式中添加了空格)</p>