как выполнить итерацию с помощью iterrows () и проверить подмножество - PullRequest
0 голосов
/ 18 апреля 2020

Я бы нашел строки в информационном кадре, который содержит все элементы кортежа, а затем установил бы значение в указанном столбце c для соответствующего индекса строки

for ix, row in df.iterrows():
    if set(tuple).issubset(row):
      df.loc[ix, ['label']] = 1

, но я получить эту ошибку:

TypeError: unhashable type: 'list'

если я выполняю следующий фрагмент кода, кажется, что он работает, но я не знаю, как установить значение в столбце метки, где строка соответствует кортежу

for row in df.astype(str).values.tolist():
  set(tuple).issubset(row))

У кого-нибудь есть предложения?

Спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 18 апреля 2020

Используйте enumerate и iloc.

for idx, row in enumerate(df.astype(str).values.tolist()):
    if set(tuple).issubset(row):
        df.iloc[idx, df.columns.get_loc('label')] = 1
0 голосов
/ 18 апреля 2020

Используйте понимание списка, например, со случайно сгенерированными данными:

import pandas as pd
import numpy as np

np.random.seed(2)

tuples = list(zip(np.random.randint(0, 5, 10), np.random.randint(
    10, 15, 10), np.random.randint(20, 30, 10)))

data = pd.DataFrame(dict(tups=tuples))

data.head()

#   tups
# 0 (0, 14, 23)
# 1 (0, 14, 25)
# 2 (3, 14, 28)

Затем вы можете установить label генерацию значений из списка

tuple_subset = (0, 14)
data['Label'] = [1 if set(tuple_subset).issubset(x)
                 else None for x in data.tups]

data.head(3)

#   tups        Label
# 0 (0, 14, 23) 1.0
# 1 (0, 14, 25) 1.0
# 2 (3, 14, 28) NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...