#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