Mit*_*lax 13 python mysql pandas
我有一个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 |
+------+---------
Run Code Online (Sandbox Code Playgroud)
我想找到或编写一个函数来返回我将在MySQL中使用以下命令返回的DataFrame:
SELECT
team,
GROUP_CONCAT(user)
FROM
df
GROUP BY
team
Run Code Online (Sandbox Code Playgroud)
为了以下结果:
+------+---------------------------------------+
| team | group_concat(user) |
+------+---------------------------------------+
| A | elmer,daffy,bugs,foghorn,goofy,marvin |
| B | dawg,speedy,pepe |
| C | petunia,porky |
+------+---------------------------------------+
Run Code Online (Sandbox Code Playgroud)
通过迭代行并添加到字典,我可以想到通过讨厌的方式来实现这一点,但必须有更好的方法.
Phi*_*oud 29
请执行下列操作:
df.groupby('team').apply(lambda x: ','.join(x.user))
Run Code Online (Sandbox Code Playgroud)
得到一个Series
字符串或
df.groupby('team').apply(lambda x: list(x.user))
Run Code Online (Sandbox Code Playgroud)
得到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
Run Code Online (Sandbox Code Playgroud)
请注意,通常对这些类型的任何进一步操作Series
都会很慢并且通常不鼓励.如果有另一种聚合的方式而不是放在一个list
内部,Series
你应该考虑使用这种方法.
如果您想使用更通用的解决方案agg
:
df.groupby('team').agg({'user' : lambda x: ', '.join(x)})
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7793 次 |
最近记录: |