假设我有这样一个数据帧:

name type
John 1
Joe 0
Joe 1
Marcus 0
John 2
John 0

我如何使用Pandas 才能获得与以下相同的结果:

SELECT name, GROUP_CONCAT(type)
FROM df
GROUP BY name
HAVING COUNT(*)>1;
name type
john 0,1,2
joe 0,1

推荐答案

您可以将自定义groupby.agg与以下内容一起使用:

out = (df
   .groupby('name', as_index=False, sort=False)['type']
   .agg(lambda s: ','.join(s.sort_values().astype(str)) if len(s)>1 else None)
   .dropna(subset='type')
)

或者:

out = (df
   .groupby('name', as_index=False, sort=False)
   .agg(**{'type': ('type', lambda s: ','.join(s.sort_values().astype(str))),
           'count': ('type', 'count')
          })
   .loc[lambda d: d.pop('count').gt(1)]
)

或者:

out = (df
   .groupby('name', as_index=False, sort=False)['type']
   .agg(lambda s: ','.join(s.sort_values().astype(str)))
   .loc[lambda d: d['type'].str.contains(',')]
)

输出:

   name   type
0  John  0,1,2
1   Joe    0,1

Python相关问答推荐

如何获取Django REST框架中序列化器内部的外卡属性?

将从Python接收的原始字节图像数据转换为C++ Qt QIcon以显示在QStandardProject中

为什么基于条件的过滤会导致pandas中的空数据框架?

如何将我的位置与光强度数据匹配到折射图案曲线中?

如何使用bs 4从元素中提取文本

如何使用没有Selenium的Python在百思买着陆页面上处理国家/地区 Select ?

理解Python的二分库:澄清bisect_left的使用

滚动和,句号来自Pandas列

如何在箱形图中添加绘制线的传奇?

try 在树叶 map 上应用覆盖磁贴

Python 约束无法解决n皇后之谜

海运图:调整行和列标签

如何在python polars中停止otherate(),当使用when()表达式时?

Streamlit应用程序中的Plotly条形图中未正确显示Y轴刻度

有没有一种方法可以从python的pussompy比较结果中提取文本?

在Python中,从给定范围内的数组中提取索引组列表的更有效方法

不允许访问非IPM文件夹

dask无groupby(ddf. agg([min,max])?''''

Pandas:计算中间时间条目的总时间增量

如何使用正则表达式修改toml文件中指定字段中的参数值