pandas - 熊猫:用条件连接行
问题描述
我正在尝试进行特定的熊猫操作,但不知道如何操作。假设下表是我的原始表格。
电子邮件 | 属性 |
---|---|
js@电子邮件 | 国家:美国 |
js@电子邮件 | 第一名:约翰 |
js@电子邮件 | 展示:约翰 |
js@电子邮件 | 马克史密斯 |
js@电子邮件 | 地址:主街 123 号 |
js@电子邮件 | 巴尔的摩 |
js@电子邮件 | 医学博士 |
js@电子邮件 | 12345 |
其余条目对于许多其他用户来说是相似的,但可能有不同的顺序。数据框有超过 140 万行。我正在尝试获得以下输出。这可以就地完成,也可以通过创建一个新列来完成(无论哪个更好更快)。下面的示例显示了在原地执行时的输出。
电子邮件 | 属性 |
---|---|
js@电子邮件 | 国家:美国 |
js@电子邮件 | 第一名:约翰 |
js@电子邮件 | 展示:约翰、马克·史密斯 |
js@电子邮件 | 地址:123 Main St, Baltimore, MD, 12345 |
获取以下输出的规则如下:如果条目中有a ':'
,则'Attributes'
保留原始文本,如果条目中没有':'
,则将该文本移动到上面的条目中,并','
在其间添加a。这样做直到下一个条目':'
。
我现在使用的代码是:
df['Extended Attributes'].groupby(df['Extended Attributes'].str.contains(':').cumsum()).agg(', '.join)
但是,这只返回一列带有索引,它不会修改原始数据帧,我无法将其插入原始数据帧,因为它没有空行,所以会出现不匹配。
解决方案
推荐阅读
- blazor - 升级到 0.6.0 后无法构建 Blazor 项目
- excel - 键入时具有自动完成和搜索功能的 VBA 组合框
- bitbucket-server - 如何创建一个拒绝使用错误文件名推送的 BitBucket 挂钩?
- image - 如何在 Flutter/Dart 中“将参数转换为 'dart.ui::Image'”
- java - Dropwizard 添加过滤器以记录相关 ID
- ios - MGLMapView 不显示添加到视图控制器的任何对象
- javascript - 从方法更新对象属性
- angular - 这个例子中的 this.emoji 是什么?
- coinbase-api - Commerce API 是否允许您接收查询(通过 Webhooks 或 REST),让您知道何时检测到付款?
- python - pyspark 中仅基于一列的两个 DataFrame 之间的差异