Python 按第1列分组并从第2列添加逗号分隔的条目
我有一个pandas数据框,大约有500万行,有两列top_level_domain和category。我想创建一个新的数据框架,其中包含不同的顶级域和一个类别列,该列以逗号分隔,用于唯一的类别。此数据帧已具有按性质用逗号分隔的类别。其他领域如谷歌将有重复类别,但我只想要一个 数据帧:Python 按第1列分组并从第2列添加逗号分隔的条目,python,python-3.x,pandas,pandas-groupby,Python,Python 3.x,Pandas,Pandas Groupby,我有一个pandas数据框,大约有500万行,有两列top_level_domain和category。我想创建一个新的数据框架,其中包含不同的顶级域和一个类别列,该列以逗号分隔,用于唯一的类别。此数据帧已具有按性质用逗号分隔的类别。其他领域如谷歌将有重复类别,但我只想要一个 数据帧: df1 top_level_domain category 1 google.com Search Engines 2 service-now.com
df1
top_level_domain category
1 google.com Search Engines
2 service-now.com Business, Software/Hardware
3 google-analytics.com Internet Services
4 live.com None Assigned
5 google.com Content Server
6 google.com Search Engines
7 inspectlet.com Internet Services
8 doubleclick.net Online Shopping, Web Ads
9 google.com Search Engines
10 doubleclick.net Ads
期望输出:
df2
top_level_domain category
1 google.com Search Engines, Content Server
2 service-now.com Business, Software/Hardware
3 google-analytics.com Internet Services
4 live.com None Assigned
7 inspectlet.com Internet Services
8 doubleclick.net Online Shopping, Web Ads, Ads
实现这一目标的最佳方式是什么
我已经试过了所有的例子
和其他人一样,下面的一个,但我仍然得到重复的类别列
distinct_category = distinct_category.groupby('top_level_domain')['category'].agg(lambda x: ', '.join(set(x))).reset_index()
但是我在列中得到了重复的结果
1 zoho.com Online Shopping, Interactive Web Applications, Interactive Web Applications, Interactive Web Applications, Motor Vehicles
1 zohopublic.com Internet Services, Motor Vehicles, Internet Services, Online Shopping, Internet Services
首先展开数据框,使每行仅包含一个类别:
split = df['category'].str.split(', ')
lens = split.str.len()
df = pd.DataFrame({'top_level_domain': np.repeat(df['top_level_domain'].values, lens),
'category': np.concatenate(split)})
然后删除重复项并将agg与str.join一起使用:
首先展开数据框,使每行仅包含一个类别:
split = df['category'].str.split(', ')
lens = split.str.len()
df = pd.DataFrame({'top_level_domain': np.repeat(df['top_level_domain'].values, lens),
'category': np.concatenate(split)})
然后删除重复项并将agg与str.join一起使用:
首先按逗号拆分列,然后按列分组,并使用生成器将嵌套列表与set和join展平: 另一种解决方案是向后分配拆分的值:
df = (distinct_category.assign(category = distinct_category['category'].str.split(', '))
.groupby('top_level_domain')['category']
.agg(lambda x: ', '.join(set(y for z in x for y in z)))
.reset_index())
首先按逗号拆分列,然后按列分组,并使用生成器将嵌套列表与set和join展平: 另一种解决方案是向后分配拆分的值:
df = (distinct_category.assign(category = distinct_category['category'].str.split(', '))
.groupby('top_level_domain')['category']
.agg(lambda x: ', '.join(set(y for z in x for y in z)))
.reset_index())
以下代码适用于我:
df =df.groupby('top_level_domain')['category'].agg([('category', ', '.join)]).reset_index()
以下代码适用于我:
df =df.groupby('top_level_domain')['category'].agg([('category', ', '.join)]).reset_index()