1.一行拆多行

当一行的单元格中是由统一分隔符分隔的多个字符串,希望实现按分隔符拆分,每个字符串占一行。

(1)原数据df

(2)处理步骤

#一、把“商品”字段拆分,分为多列
df_tmp=df['商品'].str.split(',',expand=True)
df_tmp

#二、将行索引转变成列索引(第二层),得到一个层次化的Series
df_tmp=df_tmp.stack()
df_tmp

 

# 三、重置索引,并删除多于的索引
df_tmp = df_tmp.reset_index(level=1,drop=True)
df_tmp

# 四、与原始数据合并
df_tmp.name='商品'
df_new = df.drop(['商品'], axis=1).join(df_tmp).reset_index().drop(columns='index')
df_new

 (3)代码整合

# 一、把“商品”字段拆分,分为多列
df_tmp=df['商品'].str.split(',',expand=True)
# 二、把行转列成列
df_tmp=df_tmp.stack()
# 三、重置索引,并删除多于的索引
df_tmp = df_tmp.reset_index(level=1,drop=True)
# 四、与原始数据合并
df_tmp.name='商品'
df_new = df.drop(['商品'], axis=1).join(df_tmp).reset_index().drop(columns='index')

2.多行并一行

(1)原数据df

 (2)处理步骤

# 定义函数,做分组聚合
def func(df):
    return ','.join(df.values)
# 给DataFrame应用函数
df = df.groupby(by='客户编号').agg(func).reset_index()
df

 

 3.总结

        一行转多行稍微复杂一些,需要先将一个单元格中包含多个元素的长字符串根据分隔符切割,以含有最多个元素的行为准,分成对应个数的列,其余不足最多个数的行所余出列用null填充,分为多列后,再将行索引转变成列索引,一行数据就变成了两层结构多行数据,重置索引后与原数据合并即可。

        多行转一行就很简单,只需要定义一个拼接dataframe的值的函数,再将整个dataframe分组聚合拼接即可。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐