Как сопоставить длины каждой строки определенного столбца в таблице с определенным значением из вспомогательной таблицы и создать флаг, когда условие выполняется? - PullRequest
1 голос
/ 26 сентября 2019

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

Таблица (Таблица 1) IЗагрузка имеет следующую структуру: Таблица 1

, а таблица (Таблица 2), показывающая, как долго должна быть переменная, имеет следующий вид: Таблица 2

Я бы хотел сопоставить длину каждой строки для каждого столбца в Таблице 1 для длины в Таблице 2 и создать флаг, чтобы при выполнении условия в этой строке я получал 1, в противном случае 0

Пример

Я не эксперт, поэтому я попробовал следующий код:

new = pd.Dataframe()
for c,f in zip(Table2['variable'],Table2['length']):
    if f == Table1[c].astype(str).str.len():
        new['warning_'+c] == 0
    else:
        new['warning_'+c] == 1

Я получаю следующую ошибку: ValueError: TrueЦенность Серии неоднозначна.Используйте a.empty, a.bool (), a.item (), a.any () или a.all ().

1 Ответ

0 голосов
/ 26 сентября 2019

Использование:

s = Table2.set_index('variable')['length']
Table1 = Table1.applymap(len).ne(s).astype(int).add_prefix('check_')

Альтернатива:

Table1 = Table1.apply(lambda x: x.str.len()).ne(s).astype(int).add_prefix('check_')

print (Table1)
   check_A  check_B  check_C
0        1        0        0
1        0        0        1
2        0        1        1

Объяснение:

Сначала получить длину строки для всех значений с помощью DataFrame.applymap или DataFrame.apply с Series.str.len:

print (Table1.applymap(len))

   A  B  C
0  5  2  7
1  4  2  2
2  4  5  2

Затем преобразуйте Table2 в Series с DataFrame.set_index:

s = Table2.set_index('variable')['length']
print (s)
variable
A    4
B    2
C    7
Name: length, dtype: int64

И сравните не равным DataFrame.ne, затем преобразуйте в целые числа для отображения True/False в 1/0:

print (Table1.applymap(len).ne(s).astype(int))
   A  B  C
0  1  0  0
1  0  0  1
2  0  1  1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...