Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按第1列分组并从第2列添加逗号分隔的条目_Python_Python 3.x_Pandas_Pandas Groupby - Fatal编程技术网

Python 按第1列分组并从第2列添加逗号分隔的条目

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

我有一个pandas数据框,大约有500万行,有两列top_level_domain和category。我想创建一个新的数据框架,其中包含不同的顶级域和一个类别列,该列以逗号分隔,用于唯一的类别。此数据帧已具有按性质用逗号分隔的类别。其他领域如谷歌将有重复类别,但我只想要一个

数据帧:

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()