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

2024-06-11 07:43:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样的数据帧

     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()

我们将不胜感激。你知道吗


Tags: to数据refnumberdfstringreshi
2条回答

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

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")

有带标量的混合列表,所以首先需要一些预处理,然后通过chainrepeat创建数据帧:

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

相关问题 更多 >