Разница флагов в фрейме данных panda

#python #pandas #conditional-statements

Вопрос:

У меня есть набор данных pandas, и я хочу создать столбец, который бы отмечал разницу

т. е. столбец B должен иметь одинаковые значения для каждого значения в столбце A и наоборот. Если это не так, отметьте его как 1

колонка А Колонка В Новая колонка
Атланта га 0
Атланта га 0
Нью-Йорк NY 1
Нью-Йорк YN 1
компания 1 Ком 1
Компания Ком 1
Компания Ком 1

Комментарии:

1. df['A'].eq(df['B'])

Ответ №1:

Поскольку вопрос обновлен, вот способ сделать это. Я использую эти данные :

 df = pd.DataFrame({"column A": ["Atlanta", "Atlanta", "New York", "New York"], "column B": ["AT", "AT", "YN", "NY"]})
df
    column A    column B
0   Atlanta     AT
1   Atlanta     AT
2   New York    YN
3   New York    NY
 

С pd.groupby :

 df_gb = df.groupby("column A", as_index=False).nunique()

condition = [df_gb["column B"] == 1]
value = [0]
df_gb["difference"] = np.select(condition, value, default=1)
df_gb = df_gb[["column A", "difference"]]
 

Вывод[0] :

 df_gb

    column A    difference
0   Atlanta     0
1   New York    1
 

Затем, наконец, :

 df = df.merge(df_gb, on="column A", how="left")
 

Вывод[1] :

 df

    column A    column B    difference
0   Atlanta     AT          0
1   Atlanta     AT          0
2   New York    YN          1
3   New York    NY          1
 

Ответ №2:

Если вы заботитесь о порядке и повторении каждого символа в столбце B, вы можете получить сходство для каждого слова в столбце B с A.

 def sim_lower(A, B):
        return ''.join([ch for ch in B.lower() if ch in A.lower()])

df['Flag'] = [sim_lower(A,B) == B.lower() for A,B in zip(df['column A'],df['column B'])]

 

Который возвращает

    column A column B  New Column   Flag
0   Atlanta       GA           0  False
1   Atlanta       GA           0  False
2   Newyork       NY           1   True
3   Newyork       YN           1   True
4  company1      Com           1   True
5   company      Com           1   True
6   company      Com           1   True