粉丝提问今天有粉丝提出了以下问题,其中一个是“将多行从一行中分离出来”,另一个是“将多行合并为一行”。看来群友已经用powerquery解决了。但是如何基于Python来做呢?然后往下看。上面将一行拆分成多行的问题,我会提供两种思路供大家选择。当然,越简单越好。每种方法都有一些有用的技巧,希望你能学好。1)方法一下面的代码中有很多重要的知识点,需要我们仔细研究下去。我只提供解决问题的思路。关于每个知识点怎么用,希望大家自己下去研究。Pandas.melt()函数的使用;Series.str.split("/",expand=True);中expand=True参数的使用Series.sort_values()对文本进行排序;Python中enumerate()函数的使用;importpandasaspd#读取数据df=pd.read_excel("test1.xlsx",sheet_name="Sheet1")#将一列分解为多列df[["Type1","Type2""Type3"]]=df["MovieType"].str.split("/",expand=True)#选择需要的列df_final=df[["MovieName","Type1","Type2","Type3"]]#行转列df_final=df_final.melt(id_vars=["电影名称"],value_name="类型")#对"电影名称"字段进行排序df_final=df_final[["电影name","type"]]df_final.sort_values(by="moviename",inplace=True)#删除"type==None"的行forindex,valueinenumerate(df_final["type"]):ifvalue==None:df_final.drop(df_final.index[index],inplace=True)df_final的结果如下:2)方法2上面的方法真的很复杂。由于我的Pandas版本是0.23.4,无法使用explode()方法进行爆炸操作。在pandas0.25版本中,DataFrame新增了一个explode()方法,专门用于将一行变成多行。Pandas.explode()函数的使用;importpandasaspd#读取数据df=pd.read_excel("test1.xlsx",sheet_name="Sheet1")#将一行拆分成列表形式,注意:这里不需要使用expand=True参数df["type"]=df["movietype"].str.split("/")#直接对指定列进行爆破df.explode("type")结果如下:这里不用多行和一行知识,不错了解Pandas中的分组和聚合,以及某个功能的应用,可以轻松解决这个问题。importpandasaspd#读取数据df=pd.read_excel("test1.xlsx",sheet_name="Sheet2")#分组聚合,应用函数deffunc(df):return','.join(df.values)df=df结果.groupby(by='电影名称').agg(func).reset_index()df如下:
