python - 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 应如何组织。
谢谢!
解决方案
尝试:
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
推荐阅读
- dart - 例外:类型“NativeJavaScriptObject”不是预期类型“HttpRequest”的子类型
- angular - MiniCssExtractPlugin 从应用程序全局样式 webpack 中提取 css 文件
- ruby-on-rails - 使用 Rails 5 的多种类型的帖子和类别结构
- android - 如何通过可访问性服务覆盖来制作触摸事件?
- python - Tensorflow 1.8.0:Wide and Deep Model 结果不稳定。随机种子不起作用
- enterprise-architect - DiagramObject 对象中缺少 DUID (InstanceGUID)
- html - Bootstrap3 中的弹出框 - 如何使其在内容点击时不被忽视
- vue.js - 在功能组件中,如何在渲染之前对道具进行纯粹的转换?
- c# - 如果所选日期介于预订之间,则在列表视图中显示项目
- c# - ASP.NET Core 是否支持 RESTful Web API 的 JSON Web 签名?