Pandas: выберите столбцы, которые заканчиваются другим столбцом - PullRequest
1 голос
/ 28 мая 2020

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

  • «id» - это строка, часто состоящая из цифр, которая потенциально начинается с нуля
  • "parent_id" представляет идентификатор родительского элемента строки, но он был отформатирован как int, поэтому начальные нули исчезли.

Я хочу найти, для каких строк "id" то же самое, что "parent_id". Однако мне не удается сопоставить его так:

df["is_the_same"] = (df["id"]==df["parent_id"])  

, потому что некоторые из них не будут совпадать (например, идентификатор «01004» имеет «1004» в качестве parent_id и не будет соответствовать в этом случае )

Как я могу выбрать столбцы, у которых «id» равен «parent_id» после удаления потенциальных нулей?

Я также пробовал:

df["is_the_same"] = df["id"].str.endswith(df["parent_id"])

Но это кажется .str.endswith работает только с постоянными строками (другой столбец)

Ответы [ 2 ]

2 голосов
/ 28 мая 2020

Используя Series.lstrip, вы можете удалить ведущие нули из столбца id, а затем сопоставить его со столбцом parent_id, например:

df["id"].str.lstrip('0') == df["parent_id"]

Предположим, что это быть df:

In [68]: df 
Out[68]: 
      id parent_id
0  01004      1004
1   1004      1004
2    546       100

In [70]: df["is_the_same"] = df["id"].str.lstrip('0') == df["parent_id"]        
In [71]: df    
Out[71]: 
      id parent_id  is_the_same
0  01004      1004         True
1   1004      1004         True
2    546       100        False
1 голос
/ 28 мая 2020

Использовать понимание списка с endswith:

df = pd.DataFrame({'id':['01004','1004','54620'], 'parent_id':['1004','203','20']})

df["is_the_same"] = [x.endswith(y) for x, y in df[["id","parent_id"]].values]
#alternative
#df["is_the_same"] = df.apply(lambda x: x["id"].endswith(x["parent_id"]), axis=1)
print (df)
      id parent_id  is_the_same
0  01004      1004         True
1   1004       203        False
2  54620        20         True

Если разница только в начальных нулях и числах сравнивает преобразованные значения с целыми числами:

df["is_the_same"] = df["id"].astype(int) == df["parent_id"].astype(int)
print (df)
      id parent_id  is_the_same
0  01004      1004         True
1   1004       203        False
2  54620        20        False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...