У меня есть набор данных, в котором я сравниваю каждое значение столбца 1 со всеми значениями столбца 2.Я могу создать двоичную переменную для каждой строки, отмечая, действительно ли значение column1 найдено где-то в column2.
Я хотел бы теперь создать столбец, который представляет собой список всех позиций индекса, где значение column1 былонайдено в столбце 2 значение.Рабочий Python 3.6
import pandas as pd
import numpy as np
data = [{'column1': 'ibm', 'column2': 'apple'},
{'column1': 'microsoft', 'column2': 'ibm'},
{'column1': 'apple', 'column2': 'ibm'},
{'column1': 'apple', 'column2': 'microsoft'},
{'column1': 'yahoo', 'column2': 'microsoft'}]
data_df = pd.DataFrame(data)
data_df['match'] = np.where((data_df.column1.isin(data_df['column2'])), 1, 0)
Этот результат корректен для этой части.
split1 split2 match
0 ibm apple 1
1 microsoft ibm 1
2 apple ibm 1
3 apple microsoft 1
4 yahoo microsoft 0
Чтобы создать список позиций индекса для каждого значения в column1, найденном в column2, я пробовал это:
data_df['indices'] = [i for i, x in enumerate(data_df['column2']) if x == np.where((data_df.column1.isin(data_df['column2'])))]
Однако я получаю следующую ошибку:
data_df['indices'] = [i for i, x in enumerate(data_df['split2']) if x == np.where((data_df.split1.isin(data_df['split2'])))]
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/home/carterrees/PycharmProjects/data_services_predictopotamus/venv_predictopotamus36/lib64/python3.6/site-packages/pandas/core/frame.py", line 3119, in __setitem__
self._set_item(key, value)
File "/home/carterrees/PycharmProjects/data_services_predictopotamus/venv_predictopotamus36/lib64/python3.6/site-packages/pandas/core/frame.py", line 3194, in _set_item
value = self._sanitize_column(key, value)
File "/home/carterrees/PycharmProjects/data_services_predictopotamus/venv_predictopotamus36/lib64/python3.6/site-packages/pandas/core/frame.py", line 3391, in _sanitize_column
value = _sanitize_index(value, self.index, copy=False)
File "/home/carterrees/PycharmProjects/data_services_predictopotamus/venv_predictopotamus36/lib64/python3.6/site-packages/pandas/core/series.py", line 4001, in _sanitize_index
raise ValueError('Length of values does not match length of ' 'index')
ValueError: Length of values does not match length of index
Я надеюсь увидеть следующее:
split1 split2 match indices
0 ibm apple 1 1,2
1 microsoft ibm 1 3,4
2 apple ibm 1 0
3 apple microsoft 1 0
4 yahoo microsoft 0 Nan