假设我有以下df:
name job age&dob
bob teacher 35/1-1-85
kyle doctor 25/1-1-95
我想拆分行age&dob基于'/'分隔符,可以通过放置age&dob到一个列表中,然后堆叠它。然而,我不知道如何根据年龄重命名行;dob指数。例如,我想要这个。
name metadata age&dob job
bob age 35 teacher
bob dob 1-1-85 teacher
kyle age 25 doctor
kyle dob 1-1-95 doctor
我希望元数据由基于拆分的索引创建。所以在这种情况下,既然我知道年龄&dob.split('/'([0]总是年龄,我希望35岁,然后更新元数据以显示年龄。我知道如何拆分df,它只是重命名附加的行值。
让我们做
df['metadata'] = 'age&dob'
df['age&dob'] = df['age&dob'].str.split('/')
s=df.explode('age&dob').assign(metadata=df['metadata'].str.split('&').explode().tolist())
name job age&dob metadata
0 bob teacher 35 age
0 bob teacher 1-1-85 dob
1 kyle doctor 25 age
1 kyle doctor 1-1-95 dob
IIUC,让我们使用str.split
、rename
、stack
,最后使用concat
s = df['age&dob'].str.split('/',expand=True).rename({0 : 'age', 1 : 'dob'},axis=1)
.stack().reset_index(1)
.rename({'level_1' : 'metadata', 0 : 'age&dob'},axis=1)
df2 = pd.concat([df.drop(['age&dob'],axis=1),s],axis=1)
name job metadata age&dob
0 bob teacher age 35
0 bob teacher dob 1-1-85
1 kyle doctor age 25
1 kyle doctor dob 1-1-95