<p>您可以在<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.core.groupby.GroupBy.agg.html" rel="nofollow noreferrer">^{<cd1>}</a>中的自定义函数中创建集合:</p>
<pre><code>f = lambda x: list(set(z for y in x for z in y))
df = df.groupby(['location_id', 'city'])['all_poi'].agg(f).reset_index()
print (df)
location_id city all_poi
0 Port Severn [Bamboo Spa, Mount St.Louis Moonstone, Lake Hu...
</code></pre>
<p>如果顺序和性能很重要,请使用<code>dict</code>删除重复项:</p>
<pre><code>f = lambda x: list(dict.fromkeys([z for y in x for z in y]).keys())
</code></pre>
<p>另一个想法是使用<code>unique</code>:</p>
<pre><code>f = lambda x: pd.unique([z for y in x for z in y]).tolist()
</code></pre>
<p>编辑:</p>
<p>如果有多个列并且每个组需要第一个值:</p>
<pre><code>df.groupby('location_id').agg({'city': 'first', 'all_poi': f}).reset_index()
</code></pre>
<p>如果需要其他一些聚合方法,如<code>sum</code>、<code>mean</code>、<code>join</code>:</p>
<pre><code>df.groupby('location_id').agg({'city': 'first',
'all_poi': f,
'cols1':'sum',
'vals': ','.join,
'vals1': lambda x: list(x)}).reset_index()
</code></pre>