目录
一行拆分成多行
1.根据某一列拆分
效果:
代码:
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.根据多列拆分
效果:
代码:
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 = [\'姓名\',\'爱好\']
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(\'爱好\')
3.多行转一行
#定义拼接函数,并对字段进行去重 def concat_func(x): return pd.Series({ \'爱好\':\'、\'.join(x[\'爱好\'].unique()) }) #分组聚合 + 拼接 df2 = df1.groupby(df1[\'姓名\']).apply(concat_func).reset_index()
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
© 版权声明
THE END
暂无评论内容