取消分组,然后对列表列表进行分组

Ungroup and then group a list of lists

提问人:GreatFilter 提问时间:10/31/2023 最后编辑:wjandreaGreatFilter 更新时间:10/31/2023 访问量:60

问:

存在带有列表列表的 DataFrame。我需要将其取消分组到平面列表中,然后将其分组回取消分组之前的状态。

我的数据帧

d = {
    "col0": ["x", "y", "z"],
    "col1": ["Polygon", "MultiPolygon", "Polygon"], 
    "col2": [
        [[1,2], [3,4]], 
        [[[1,2]], [[1,2], [3,4], [5,6]]],  
        [[1,2], [3,4]]]}

df = pd.DataFrame(data=d)
df

我将其取消分组到一个平面列表中

df2 = df
df2['col2'] = df2[['col1', 'col2']].apply(lambda x:
    [item for sublist in x['col2'] for item in sublist]
    if x['col1'] == 'MultiPolygon'
    else [item for item in x['col2']] 
    , axis=1)

df2 = df2.explode('col2')

但在这种情况下,之后无法正确分组

#wrong result     
df3 = df2.groupby(['col0', 'col1'])['col2'].apply(list).reset_index()
Python 熊猫 列表

评论

2赞 It_is_Chris 10/31/2023
如果变量中已经是这样,为什么需要“将其分组回取消分组之前的状态”df
1赞 GreatFilter 10/31/2023
主要是因为在实际任务中的取消分组和分组之间,有很多代码适用于 df2,并且为嵌套列表重写它需要太多时间。
0赞 wjandrea 10/31/2023
对不起,有什么问题?查看如何提问。你说得对,“之后不可能正确地分组”,因为你已经破坏了 MultiPolygons 的结构,那么你试图解决这个问题吗?例如,您是否考虑过携带有关原始结构的一些信息?其次,你是否意识到和是同一个对象?如果你想做一个副本,你会这样做,这将打开重新加入作为另一种可能的解决方案。df2dfdf2 = df.copy()

答: 暂无答案