python - Python,Pandas,DataFrame,添加新列执行 SQL GROUP_CONCAT 等效
问题描述
我的问题与此处提出但未回答的问题非常相似 Replicating GROUP_CONCAT for pandas.DataFrame
我有一个 Pandas DataFame,我想将 concat 分组到一个数据框中
+------+---------+
| team | user |
+------+---------+
| A | elmer |
| A | daffy |
| A | bugs |
| B | dawg |
| A | foghorn |
+------+---------+
变得
+------+---------------------------------------+
| team | group_concat(user) |
+------+---------------------------------------+
| A | elmer,daffy,bugs,foghorn |
| B | dawg |
+------+---------------------------------------+
正如原始主题中所回答的那样,可以通过以下任何方式完成:
df.groupby('team').apply(lambda x: ','.join(x.user))
df.groupby('team').apply(lambda x: list(x.user))
df.groupby('team').agg({'user' : lambda x: ', '.join(x)})
但是生成的对象不再是 aPandas
Dataframe
了。如何将原始中的 GROUP_CONCAT 结果Pandas
DataFrame
作为新列?
干杯
解决方案
让我们分解下面的代码:
- 首先,
groupby
团队,并apply
在用户上join
使用它的元素使用,
- 然后,重置索引和
rename
生成的数据框(axis=1
, 指的是列而不是行)
res = (df.groupby('team')['user']
.apply(lambda x: ','.join(str(i) for i in x))).reset_index().rename({'user':'group_concat(user)'},axis=1)
输出:
team group_concat(user)
0 A elmer,daffy,bugs,foghorn
1 B dawg
推荐阅读
- pointers - 如何访问 SUBLEQ 中的指针
- mysql - 减小 varchar 的大小不会最小化磁盘空间吗?MySQL
- python - 将输入张量从 /job:localhost/replica:0/task:0/device:CPU:0 复制到 /job:localhost/replica:0/task:0/device:GPU:0 以运行 Cast 失败
- r - 使用 left_join 并引用数据框列的问题:错误:不能将 NA 用作 tibble 中的列索引进行分配
- python - Pygame 没有检测到按下了什么键,之前工作正常
- rust - 当引用不需要时,为什么原始指针需要 const 关键字?
- security - 密码文件而不是kafka ssl设置中的纯文本密码
- xquery - XQuery 构造具有顺序祖先节点名称的字符串对象
- dataframe - 如何将数值转换为 Julia DataFrame 列中的缺失值?
- swift - 如何使用 AVPlayer (macOS) 循环播放视频?