У меня есть фрейм данных, который выглядит следующим образом:
print(df):
# Output
Text
0 Melbourne. Adelaide. Brisbane.
1 Sydney. Adelaide. Gold Coast.
2 Gold Coast. Brisbane. Melbourne.
3 Sydney. Melbourne. Brisbane.
У меня также есть словарь
print(dict):
{'VIC': ['Melbourne'], 'SA': ['Adelaide'], 'QLD': ['Brisbane','Gold Coast'], 'NSW': ['Sydney']}
Вывод, который я пытаюсь создать:
print(df):
Text VIC SA QLD NSW
0 Melbourne. Adelaide. Brisbane. Melbourne. Adelaide. Brisbane.
1 Sydney. Adelaide. Gold Coast. Adelaide. Gold Coast. Sydney.
2 Gold Coast. Brisbane. Melbourne. Melbourne. Brisbane.
3 Sydney. Melbourne. Brisbane. Melbourne. Adelaide. Brisbane.
Когда 2 элемента появляются из одного состояния (например, в df index 2
), я хотел бы показать Брисбен вместо Золотого побережья, потому что он появляется первым в dict
. Я использовал следующий код который работает, чтобы поставить 1 или 0, если строка найдена ::
for index in df.index:
for key, s_elements in dict.items():
df.at[index, key] = (lambda: 1 if any([s in df['Text'][index] for s in s_elements]) else 0)()
print (df):
Text VIC SA QLD NSW
0 Melbourne. Adelaide. Brisbane. 1 1 1 0
1 Sydney. Adelaide. Gold Coast. 1 1 1
2 Gold Coast. Brisbane. Melbourne. 1 0 1 0
3 Sydney. Melbourne. Brisbane. 1 0 1 1
Что работает хорошо, но я пытаюсь получить имя город, найденный в столбце (используя первый элемент в каждом ключе).
Может ли кто-нибудь помочь с тем, что мне нужно сделать, чтобы имена отображались в отличие от числа? Я попробовал lambda: s_elements
вместо lambda: 1
, но получил ValueError: Must have equal len keys and value when setting with an iterable
Любая помощь будет фантастической c! большое спасибо!