根据分隔符拆分pandas-df行,然后根据索引重命名另一行



假设我有以下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.splitrenamestack,最后使用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

相关内容

  • 没有找到相关文章