pandas 一行转多行、多行转一行

文章目录

  • 1、测试数据
  • 2、一行转多行
  • 2、多行转一行

1、测试数据

df = pd.DataFrame([['张世龙', '篮球、羽毛球、英雄联盟'],
                   ['黄邵飞', '兵乓球、足球、下棋'],
                   ['刘苗苗', '绘画、写小说、跑步']])

df.columns = ['姓名','爱好']

在这里插入图片描述

2、一行转多行

方法一:

# 1、把渠道字段拆分,分为多列; 2、把行转列成列;3、重置索引,并删除多于的索引;4、更改名称
df_ = df['爱好'].str.split('、',expand=True).stack().reset_index(level=1,drop=True).rename('爱好')
df1 = df.drop(['爱好'], axis=1).join(df_)

方发二:

# 1、将渠道字段拆分;2、调用explode()方法
df['爱好'] = df['爱好'].map(lambda x:x.split('、'))
df1 = df.explode('爱好')

pandas 一行转多行、多行转一行_第1张图片

2、多行转一行

#定义拼接函数,并对字段进行去重
def concat_func(x):
    return pd.Series({
        '爱好':'、'.join(x['爱好'].unique())
    })

#分组聚合 + 拼接
df2 = df1.groupby(df1['姓名']).apply(concat_func).reset_index()

pandas 一行转多行、多行转一行_第2张图片

你可能感兴趣的:(Python,pandas)