Excel Если один столбец содержит уникальные значения, а другой столбец содержит одно истинное значение, вернуть все истинные значения для этих уникальных значений. - PullRequest
1 голос
/ 09 июля 2020

У меня есть большой файл с более чем 78K строками в Exel (версия 365). Я пытаюсь написать формулу, которая вернет значение True или False, зависящее от уникальных значений в Column A (21K уникальных значений) И если любое из значений в Column B равно True, тогда Column C должен возвращать значение True для этого диапазона уникальных значений в Column A.

Например, у меня есть следующие данные:

Column A     Column B
1            True
1            False
1            False
2            False
2            False
3            False
3            True

Я хочу Column C чтобы показать следующее:

Column A     Column B     Column C
1            True         True
1            False        True
1            False        True
2            False        False
2            False        False
3            False        True
3            True         True

Другими словами, для каждого уникального значения в Column A, и если какое-либо из соответствующих значений в Column B равно True, мне нужны все значения в Column C чтобы указать True.

После множества попыток использования различных формул, я думаю, что могу найти что-то похожее со следующей формулой, но она возвращает True для каждой ячейки. Я не уверен, что мне не хватает.

=+IF(AND(UNIQUE($A$1:$A$7)),COUNTIF($B$1:$B$7,"TRUE")>0,1)

В моих данных нет пропущенных значений.

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

Я знаю, что могу сделать это вручную с помощью следующей формулы, но с более чем 21K уникальных значений в Column A , Я не хочу делать это вручную, если мне не нужно.

=+COUNTIF($B$1:$B$3,"TRUE")>0

Если это проще выполнить в Python, этот код был бы полезен. Я новичок в Python, и мне удобнее работать с Excel, но понимаю, что Python может быть проще и быстрее.

1 Ответ

1 голос
/ 10 июля 2020

Вот как я справлюсь с этим в pandas.

print(df)
#note i've added in a non duplicated row for testing.


   Column_A  Column_B
0         1      True
1         1     False
2         1     False
3         2     False
4         2     False
5         3     False
6         3      True
7         4      True

Сначала я бы написал два логических выражения, первое - чтобы увидеть, дублирует ли какое-либо из значений второе, чтобы увидеть, если Column_B содержит любые значения True. если оба равны True, я хочу передать все идентификаторы из столбца A в список.

vals = df.loc[df.duplicated(subset=["Column_A"], keep=False) 
              & df["Column_B"].eq(True),
             "Column_A"].tolist()

print(vals)

[1, 3]

Теперь, когда мы знаем, что это за значения, мы можем написать простое логическое присваивание.

df['Column_C'] = df['Column_A'].isin(vals)

print(df)
   Column_A  Column_B  Column_C
0         1      True      True
1         1     False      True
2         1     False      True
3         2     False     False
4         2     False     False
5         3     False      True
6         3      True      True
7         4      True     False
...