Python Pandas将列表列表的列扩展为两个新列

Ims*_*msa 10 python list pandas

我有一个看起来像这样的DF。

name    id  apps
john    1   [[app1, v1], [app2, v2], [app3,v3]]
smith   2   [[app1, v1], [app4, v4]]
Run Code Online (Sandbox Code Playgroud)

我想扩展“应用程序”列,使其看起来像这样。

name    id  app_name    app_version
john    1   app1        v1
john    1   app2        v2
john    1   app3        v3
smith   2   app1        v1
smith   2   app4        v4
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏

Jam*_*mes 6

您可以.apply(pd.Series)两次获得所需的中间步骤,然后合并回原始数据帧。

import pandas as pd

df = pd.DataFrame({
    'name': ['john', 'smith'],
    'id': [1, 2],
    'apps': [[['app1', 'v1'], ['app2', 'v2'], ['app3','v3']], 
             [['app1', 'v1'], ['app4', 'v4']]]
})

dftmp = df.apps.apply(pd.Series).T.melt().dropna()
dfapp = (dftmp.value
              .apply(pd.Series)
              .set_index(dftmp.variable)
              .rename(columns={0:'app_name', 1:'app_version'})
        )

df[['name', 'id']].merge(dfapp, left_index=True, right_index=True)
# returns:
    name  id app_name app_version
0   john   1     app1          v1
0   john   1     app2          v2
0   john   1     app3          v3
1  smith   2     app1          v1
1  smith   2     app4          v4
Run Code Online (Sandbox Code Playgroud)