SYQY网游福利站-新活动速递_热门攻略_礼包中心

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分组聚合拼接即可。