将 pandas 中的不均匀数据框从锯齿状宽变高
reshape an uneven data frame in pandas from jagged wide to tall
我有5k行,每行最多有10个关联值,例如:
df=pd.DataFrame({'col1':['a','b','c'],'col2':['a1,a2,a3','b1','c1,c2']})
col1 col2
0 a a1,a2,a3
1 b b1
2 c c1,c2
我想制作一个独特的映射,例如:
pd.DataFrame({'col1':['a','a','a','b','c','c'],'col2':['a1','a2','a3','b1','c1','c2']})
col1 col2
0 a a1
1 a a2
2 a a3
3 b b1
4 c c1
5 c c2
我试过df.explode('col2')
,但没用
有什么建议吗?
你可以使用 Series.str.split
to convert to list,then you could useDataFrame.explode
:
df['col2']=df['col2'].str.split(',')
df=df.explode('col2')
print(df)
col1 col2
0 a a1
0 a a2
0 a a3
1 b b1
2 c c1
2 c c2
pandas <0.25:
df['col2']=df['col2'].str.split(',')
df=pd.DataFrame({'col1':df.col1.repeat(df.col2.str.len()),'B':np.concatenate(df.col2.values)})
print(df)
col1 B
0 a a1
0 a a2
0 a a3
1 b b1
2 c c1
2 c c2
我有5k行,每行最多有10个关联值,例如:
df=pd.DataFrame({'col1':['a','b','c'],'col2':['a1,a2,a3','b1','c1,c2']})
col1 col2
0 a a1,a2,a3
1 b b1
2 c c1,c2
我想制作一个独特的映射,例如:
pd.DataFrame({'col1':['a','a','a','b','c','c'],'col2':['a1','a2','a3','b1','c1','c2']})
col1 col2
0 a a1
1 a a2
2 a a3
3 b b1
4 c c1
5 c c2
我试过df.explode('col2')
,但没用
有什么建议吗?
你可以使用 Series.str.split
to convert to list,then you could useDataFrame.explode
:
df['col2']=df['col2'].str.split(',')
df=df.explode('col2')
print(df)
col1 col2
0 a a1
0 a a2
0 a a3
1 b b1
2 c c1
2 c c2
pandas <0.25:
df['col2']=df['col2'].str.split(',')
df=pd.DataFrame({'col1':df.col1.repeat(df.col2.str.len()),'B':np.concatenate(df.col2.values)})
print(df)
col1 B
0 a a1
0 a a2
0 a a3
1 b b1
2 c c1
2 c c2