Как получить сопоставление значения одного столбца с другим столбцом в кадре данных - PullRequest
2 голосов
/ 20 апреля 2019

Я хотел бы получить совпадения из одного столбца с другими столбцами в кадре данных.Ниже приведен пример:

  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 голосов
/ 20 апреля 2019

Мое решение работает только со столбцом attributeName, потому что из данных примера есть все данные, необходимые для вывода.

Используйте Series.str.split сначала ,, затем измените DataFrame на DataFrame.stack и разделите на .:

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

EDIT:

Если значения являются списками, используйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...