pandas实现一行拆分成多行

目录

一行拆分成多行

1.根据某一列拆分

效果:

pandas实现一行拆分成多行

pandas实现一行拆分成多行

代码:

if __name__ == \'__main__\':
    import pandas as pd
    df = pd.DataFrame({\'Country\': [\'China,US\', \'Japan,EU\', \'UK,Australia\', \'Singapore,Netherland\'],
                       \'Number\': [100, 150, 120, 90],
                       \'Value\': [1, 2, 3, 4],
                       \'label\': list(\'abcd\')})
    df_split_row = df.drop(\'Country\', axis=1).join(
        df[\'Country\'].str.split(\',\', expand=True).stack().reset_index(level=1, drop=True).rename(\'Country\'))

2.根据多列拆分

效果:

pandas实现一行拆分成多行

pandas实现一行拆分成多行

代码:

if __name__ == \'__main__\':
    import pandas as pd
    df = pd.DataFrame({\'Code\': [\'212027\'],
                       \'Color\': [\'blue, pink, yellow\'],
                       \'Size\': [\'12-18M, 2-3Y, 3-4Y\']})
    split_columns = [\'Color\', \'Size\']
    df_convert = df.drop(columns=split_columns, axis=1)
    for column in split_columns:
        df_convert = df_convert.join(
            df[column].str.split(\',\', expand=True).stack().reset_index(level=1, drop=True).rename(column))
    df_convert = df_convert.reset_index(drop=True)

一行转多行、多行转一行

1.测试数据

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

pandas实现一行拆分成多行

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实现一行拆分成多行

3.多行转一行

#定义拼接函数,并对字段进行去重
def concat_func(x):
    return pd.Series({
        \'爱好\':\'、\'.join(x[\'爱好\'].unique())
    })
#分组聚合 + 拼接
df2 = df1.groupby(df1[\'姓名\']).apply(concat_func).reset_index()

pandas实现一行拆分成多行

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容