首页 > 解决方案 > Pandas - 合并具有共享值的数据帧行

问题描述

我有一个数据框,其中包含第一行中的项目列表,然后是在后续列中与该项目一起购买的所有项目:

df = pd.DataFrame({'1': ['Item 1', 'Item 1', 'Item 1', 'Item 2', 'Item 2', 'Item 2'],  
                    '2': ['Item 4', 'Item 5', 'Item 6', 'Item 7', 'Item 8', 'Item 9'],
                   '3': ['Item 10', 'Item 11', 'Item 12', 'Item 13', 'Item 14', 'Item 15']})

我想将与每个项目一起购买的所有项目合并到一行中,如下所示:

new_df = pd.DataFrame({'1': ['Item 1', 'Item 2'],
                   '2': ['Item 4', 'Item 7'],
                   '3': ['Item 10', 'Item 13'],
                   '4': ['Item 5', 'Item 8'],
                   '5': ['Item 11', 'Item 14'],
                   '6': ['Item 6', 'Item 9'],
                   '7': ['Item 12', 'Item 15']})

因此,使用项目 1 购买的所有项目都形成了它旁边的列。正如您在我的示例中看到的那样,我想保留与每件商品一起购买的所有商品,即使它们是重复的。

我一直试图让它与熊猫数据框一起工作,但是如果为每个项目生成一个列表也可以。我一直在尝试某种 groupby 和 lambda 函数,但我无法让它们工作。

编辑:更改数字以更清楚地说明最终的 df 应如何组织。

谢谢!

标签: pythonpandas

解决方案


尝试:

new_df = df.groupby('1', as_index=False).apply(
    lambda x: pd.Series(x.values.ravel()[1:]))

输出:

        1       0        1       2       3        4       5       6        7
0  Item 1  Item 4  Item 10  Item 1  Item 5  Item 11  Item 1  Item 6  Item 12
1  Item 2  Item 7  Item 13  Item 2  Item 8  Item 14  Item 2  Item 9  Item 15

推荐阅读