擅长:python、mysql、java
<p>对我来说,最简单的解决方案是这样的(经过测试)-您实际上不需要groupby:</p>
<pre><code>df['str_len'] = df.text_column.str.len()
df.sort_values(['str_len'], ascending=False)\
.drop_duplicates(['source'])\
.drop(columns='text_column')
source str_len
7 b 14.0
0 a 9.0
3 c 9.0
</code></pre>
<p>关于你的第二个问题,我认为groupby很适合你:</p>
<pre><code>top_x = 2
df.groupby('source', as_index=False)\
.apply(lambda sourcedf: sourcedf.sort_values('str_len').nlargest(top_x, columns='str_len', keep='all'))\
.drop(columns='text_column')
</code></pre>