<p>这应该做到:</p>
<pre><code>portfolios = []
for _, account in df.groupby('AccountName'):
portfolio = {stock['StockName']: stock['Allocation']
for _, stock in account.iterrows()}
portfolios.append(portfolio)
</code></pre>
<p>首先使用<a href="https://pandas.pydata.org/pandas-docs/stable/user_guide/groupby.html" rel="nofollow noreferrer">^{<cd1>}</a>函数按<code>AccountName</code>对数据帧的行进行分组。要访问每个帐户的单独行(股票),可以使用<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.iterrows.html" rel="nofollow noreferrer">^{<cd3>}</a>方法。正如user@ebb earl在评论中解释的那样,<code>_</code>作为占位符变量存在,因为<code>iterrows()</code>返回(index,<a href="https://pandas.pydata.org/pandas-docs/stable/reference/series.html" rel="nofollow noreferrer">^{<cd6>}</a>)元组,而我们只需要<code>Series</code>(行本身)。在此基础上,使用<a href="https://stackoverflow.com/questions/1747817/create-a-dictionary-with-list-comprehension-in-python">dict comprehension</a>为每个股票创建一个字典映射<code>StockName</code>->;<code>Allocation</code>。最后,将该字典追加到<code>portfolios</code>的列表中,得到预期的输出:</p>
<p><code>[{'ABC': 0.4, 'ABD': 0.6}, {'EFG': 0.5, 'HIJ': 0.4, 'LMN': 0.1}]</code></p>
<p>还有一件事:如果您稍后决定用帐户名来标记<code>portfolios</code>中的每个dict,可以这样做:</p>
^{pr2}$
<p>这将返回嵌套dict的列表,如下所示:</p>
<pre><code>[{'MN001': {'ABC': 0.4, 'ABD': 0.6}},
{'MN002': {'EFG': 0.5, 'HIJ': 0.4, 'LMN': 0.1}}]
</code></pre>
<p>注意,在本例中,我使用了变量<code>acct_name</code>,而不是赋值给<code>_</code>,因为我们实际上将使用索引来“标记”列表中的dict。在</p>