<p>您可以使用的一种方法非常类似于SQL语句</p>
<p>首先找到房屋价值超过400美元的人:</p>
<pre><code>persons = df.loc[(df['Belonging'] == 'House') & (df['Value'] > 400), 'Person']
</code></pre>
<p>这将返回一个系列与“戴安娜”和“埃里卡”</p>
<p>然后为这些人找到汽车:</p>
<pre><code>df[df['Person'].isin(persons) & (df['Belonging'] == 'Car')]
</code></pre>
<p>这将返回您预期的结果</p>
<hr/>
<p>对<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html#pandas.DataFrame.merge" rel="nofollow noreferrer">^{<cd1>}</a>也可以使用联接,这可能比对大型数据集使用<code>isin()</code>更有效:</p>
<pre><code>df_join = df.merge(persons, on='Person')
</code></pre>
<p>然后你可以通过过滤找到汽车:</p>
<pre><code>df_join[df['Belonging'] == 'Car']
</code></pre>
<p>这也将返回您预期的结果</p>
<hr/>
<p>解决此问题的一种不同方法是通过将个人物品转换为列来透视数据,这样每个人就可以有一行列出他们的所有物品</p>
<p>您可以使用<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.pivot_table.html#pandas.DataFrame.pivot_table" rel="nofollow noreferrer">^{<cd3>}</a>将此数据放入一个相对平坦的数据框:</p>
<pre><code>df_pivot = df.pivot_table(values='Value', index='Person', columns='Belonging', fill_value=-1)
</code></pre>
<p>在这一点上,您可以通过以下方式找到房屋价值超过400美元的人的汽车价值:</p>
<pre><code>df_pivot.loc[df_pivot['House'] > 400, 'Car']
</code></pre>
<p>请注意,最后一个将返回一个序列,而不是一个数据帧,因为Person现在被转换为索引。如果您想收集关于某人的更多信息,pivot dataframe方法非常有用,因此将某人放在一行中可以非常轻松地访问与此人相关的所有数据</p>