Заполнение фрейма данных истинными значениями на основе критериев - PullRequest
1 голос
/ 08 июля 2019

Я создал фрейм данных со столбцами в виде разных документов и строками, такими как эти документы:
enter image description here

Есть еще много документов и ~ 70 дополнительных функций. Я хочу заменить значения NaN на True или оставить значение NaN в зависимости от того, содержит ли документ функцию (строку).

Предположим:

t1_list = ['date', 'review_score']

Тогда первые две строки под t1 в кадре данных будут выглядеть как True и course_id, а остальные строки останутся NaN, если проверять элементы t1_list относительно текущей строки.
Каждый «документ» имеет соответствующий список, аналогичный приведенному выше, содержащий функции этого документа. По сути, я просто создаю большую матрицу со значениями True / NaN, чтобы легко увидеть, какие документы содержат или не содержат одинаковые функции. Таким образом, если текущее имя строки содержится в соответствующем списке, замените NaN на True.

Ответы [ 2 ]

2 голосов
/ 08 июля 2019

предположим, что у вас есть подобный дикт

features_per_doc = {"t1": ['date', 'review_score'], "t2": ['review_score'],\
                     "t3":['review_score', 'date', 'review_score']}

тогда вы можете сделать:

df.apply(lambda column: column.index.isin(features_per_doc[column.name]))

это вернет:

                 t1     t2     t3
date           True  False   True
review_score   True   True   True
course_id     False  False  False

и если вы хотите избавиться от Ложей, тогда вы можете сделать

df.replace(False, pd.np.nan)
0 голосов
/ 08 июля 2019

Предположим, ваш фрейм данных df со столбцами в качестве имен документов и индексами в качестве функций. Поместите свои документы в словарь, чтобы лучше получить к ним доступ. Допустим, это dict равно docDict с ключами в качестве имени документа, т.е. t1, t2 и т. Д., И с содержимым в качестве содержимого документа. Тогда следующий код должен работать. Если вы не хотите использовать dict, вам придется обходить каждый документ другим способом, но остальные будут такими же.

for doc in df.columns:
    for feature in docDict[doc]:
        df[feature][doc] = True

Теперь ваш фрейм данных df будет иметь требуемые результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...