擅长:python、mysql、java
<p>您最初提出问题时<code>Tests</code>的输出是一个列表。这是提供该输出的代码。稍后我将尝试为dict创建另一个版本:</p>
<ol>
<li><code>Tests</code>列非常直接。首先,将相关列连接到一个sting中。稍后,在<code>.groupby()</code>中,您将把这些值聚合为一个列表</李>
<li>通过获取每个组的<code>.min()</code>并返回<code>A</code>或<code>B</code>来创建<code>Grade</code>列。稍后,您可以将其合并回新的合并数据帧</李>
</ol>
<hr/>
<pre><code>df['Tests'] = df['Subject'] + ': ' + df['Number_of_Tests'].astype(str)
df['Grade'] = (df.groupby(['Id'])['Number_of_Tests'].transform('min') > 5).replace([True,False], ['A','B'])
df = pd.merge(df.groupby(['Id'])['Tests'].agg(list).reset_index(),
df[['Grade','Id']], on='Id').drop_duplicates(subset='Id')
df
Out[1]:
Id Tests Grade
0 101 [Maths: 6, Science: 8, History: 10] A
3 102 [History: 5, Maths: 4, Science: 7] B
</code></pre>