我有一个pandas DataFrame df:
+------+---------+
| team | user |
+------+---------+
| A | elmer |
| A | daffy |
| A | bugs |
| B | dawg |
| A | foghorn |
| B | speedy |
| A | goofy |
| A | marvin |
| B | pepe |
| C | petunia |
| C | porky |
+------+---------
我想找到或编写一个函数来返回我将使用以下内容返回的DataFrame:
SELECT
team,
GROUP_CONCAT(user)
FROM
df
GROUP BY
team
获得以下结果:
+------+---------------------------------------+
| team | group_concat(user) |
+------+---------------------------------------+
| A | elmer,daffy,bugs,foghorn,goofy,marvin |
| B | dawg,speedy,pepe |
| C | petunia,porky |
+------+---------------------------------------+
我可以通过迭代行并添加到字典中来考虑讨厌的方法,但必须有更好的方法。
答案 0 :(得分:24)
执行以下操作:
df.groupby('team').apply(lambda x: ','.join(x.user))
获取Series
个字符串或
df.groupby('team').apply(lambda x: list(x.user))
获取Series
个list
个字符串。
以下是结果:
In [33]: df.groupby('team').apply(lambda x: ', '.join(x.user))
Out[33]:
team
a elmer, daffy, bugs, foghorn, goofy, marvin
b dawg, speedy, pepe
c petunia, porky
dtype: object
In [34]: df.groupby('team').apply(lambda x: list(x.user))
Out[34]:
team
a [elmer, daffy, bugs, foghorn, goofy, marvin]
b [dawg, speedy, pepe]
c [petunia, porky]
dtype: object
请注意,通常对这些类型的Series
的任何进一步操作都会很慢并且通常不鼓励。如果有另一种聚合方式而不将list
置于Series
内,则应考虑使用该方法。