Pandas按URL分组,将行中word转为多列的实现需求
解决DataFrame按URL分组并拆分Word为多列的问题
刚好碰到过类似的需求,我来给你一步步实现这个效果。首先我们明确目标:把同一个url对应的多个word值拆分成独立的列,比如/refrigerators对应的三个word要变成word、word1、word2三列。
步骤1:准备示例数据
先把你给出的示例DataFrame创建出来:
import pandas as pd df2 = pd.DataFrame({ 'url': ['/pool','/refrigerators','/refrigerators','/refrigerators','/joss-and-main','/furniture','/entertainment-centers-and-tv-stands'], 'word': ['pool','refrigerator','fridge','cooler','joss and main','furniture','tv stand'] })
步骤2:给每个组内的Word添加序号
我们需要给每个url分组里的word标记顺序,这样后续才能把它们转成不同的列:
# 给每个url组内的word分配从0开始的序号 df2['col_idx'] = df2.groupby('url').cumcount()
这一步之后,每个word都会有一个组内的索引,比如/refrigerators下的三个word对应的col_idx分别是0、1、2。
步骤3:重塑数据生成多列
用pivot方法把行转成列,然后调整列名让它符合你的需求:
# 重塑数据,将col_idx转为列 result = df2.pivot(index='url', columns='col_idx', values='word').reset_index() # 重命名列:第一列是Url,后续列依次是word、word1、word2... result.columns = ['Url'] + [f'word{i}' if i > 0 else 'word' for i in result.columns[1:]]
步骤4:处理空值(可选)
如果有些url只有一个word,其他列会显示NaN,我们可以把这些空值换成空字符串让输出更整洁:
result = result.fillna('')
最终输出
运行完上面的代码后,result就是你想要的格式了,输出如下:
| Url | word | word1 | word2 |
|---|---|---|---|
| /pool | pool | ||
| /refrigerators | refrigerator | fridge | cooler |
| /joss-and-main | joss and main | ||
| /furniture | furniture | ||
| /entertainment-centers-and-tv-stands | tv stand |
这个方法的好处是不管每个url下有多少个word,都能自动生成对应的列,扩展性很强。
内容的提问来源于stack exchange,提问作者kaws
相关产品推荐
相关产品推荐

