如何获得匹配数据框中的一列的值与另一列

时间:2019-04-20 11:00:35

标签: python python-3.x pandas postgresql dataframe

我想从数据框中的一列中获取匹配项。下面是一个示例:

  tableNameFrom   tableNameJoin   attributeName
1 film            language        [film.languageId, language.languageID]
2 inventory       rental          [invetory.inventoryId, rental.filmId]

在上面的示例中,我想在tablenameFrom和tablenameJoin与attributeName之间进行匹配。这里是期望的输出:

  tableName    attributeName
1 film         languageId
2 language     languageID
3 inventory    inventoryId
4 rental       filmId

1 个答案:

答案 0 :(得分:0)

我的解决方案仅适用于attributeName列,因为来自示例数据的所有数据都需要输出。

先用,使用Series.str.split,然后用DataFrame.stack重塑DataFrame并用.分割:

df1 = (df['attributeName'].str.split(', ', expand=True)
                          .stack()
                          .str.split('.', expand=True)
                          .reset_index(drop=True))
df1.columns = ['tableName','attributeName']
print (df1)
  tableName attributeName
0      film    languageId
1  language    languageID
2  invetory   inventoryId
3    rental        filmId

编辑:

如果值是列表,请使用DataFrame构造函数:

print (type(df.loc[1, 'attributeName']))
<class 'list'>

df1 = (pd.DataFrame(df['attributeName'].values.tolist())
                          .stack()
                          .str.split('.', expand=True)
                          .reset_index(drop=True))
df1.columns = ['tableName','attributeName']
print (df1)
  tableName attributeName
0      film    languageId
1  language    languageID
2  invetory   inventoryId
3    rental        filmId