如何将数据框中的多个列表列转换为给定的?

时间:2019-01-07 08:24:04

标签: python pandas dataframe

我有这样的数据框

     Number      String            Aut
  0 [12, 13]    [hi are, ho to]    ppppp
  1   34         How               qqqqq
  2   35         are               wwwwwww

我想将其转换为此

         Number      String            Aut
  0   12          hi are            ppppp
  1   13          ho to             ppppp
  2   34          How               qqqqq
  3   35          are               wwwwwww

我尝试了这个但没用  ref

res = df.set_index(['Aut'])['Number', 'String'].apply(pd.Series).stack()

我们将不胜感激。

2 个答案:

答案 0 :(得分:0)

存在带有标量的混合列表,因此首先需要进行一些预处理,然后通过chainrepeat创建DataFrame:

n = [x if isinstance(x, list) else [x] for x in df['Number']]
s = [x if isinstance(x, list) else [x] for x in df['String']]
lens = [len(x) for x in n]

from itertools import chain

df = pd.DataFrame({
    'Number' : list(chain.from_iterable(n)), 
    'String' : list(chain.from_iterable(s)), 
    'Aut' : df['Aut'].values.repeat(lens)
})
print (df)
   Number  String      Aut
0      12  hi are    ppppp
1      13   ho to    ppppp
2      34     How    qqqqq
3      35     are  wwwwwww

答案 1 :(得分:0)

这可以通过两个步骤完成:

step1_df=df.set_index('Aut').String.apply(pd.Series).stack().reset_index(level=0).rename(columns={0:'String'}) 

step2_df=df.set_index('Aut').Number.apply(pd.Series).stack().reset_index(level=0).rename(columns={0:'Number'})

合并两个df:

 final=pd.merge(step1_df,step2_df,on="Aut")