我有这样的数据框
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()
我们将不胜感激。
答案 0 :(得分:0)
存在带有标量的混合列表,因此首先需要进行一些预处理,然后通过chain
和repeat
创建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")