решение, используя поддельные колонки
Отказ от ответственности: Ниже вы можете найти пример «фальшивый колонке» подход, который не может подходит для огромных фреймов данных со многими соответствующими столбцами сложных типов. Кроме того, я предпочитаю работать с простыми индексами и помещать как можно больше данных в столбцы, а не в индексы.
Итак, давайте создадим два набора данных: A будет содержать несколько случайных символов Family Guy, а B будет содержать несколько членов семьи Family Guy. Надеюсь, вы знакомы с этим удивительным сериалом! :)
# Create a DF A with some Quahog Family guy citizens (with multiindex)
multiindexA = pd.MultiIndex.from_tuples([["Peter","Griffin"],["Glenn","Quagmire"],["Joe","Swanson"],["Cleveland","Brown"],["Brian","Griffin"],["Stewie","Griffin"],["Lois","Griffin"]],names=["Name","Surname"])
A=pd.DataFrame([40,35,38,45,8,2,35],index=multiindexA, columns=["Age"])
print A
Age
Name Surname
Peter Griffin 40
Glenn Quagmire 35
Joe Swanson 38
Cleveland Brown 45
Brian Griffin 8
Stewie Griffin 2
Lois Griffin 35
# Create a DF B with some Family guy inner family members (with simple simple index)
B = pd.DataFrame(data=[["Peter","Griffin",40],["Lois","Griffin",35],["Brian","Griffin",8],["Stewie","Griffin",2]], columns=["Name","Surname","Age"])
print B
Name Surname Age
0 Peter Griffin 40
1 Lois Griffin 35
2 Brian Griffin 8
3 Stewie Griffin 2
Давайте найдем персонажей Family Guy, которые не являются членами семьи Гриффинов. Во-первых, мы будем использовать reset_index
нормализовать dataframes в ту же структуру, так как это собирается сделать нашу жизнь намного проще:
# Reset index to move multiindex into columns in order to normalize dataframes
A = A.reset_index()
print A
Name Surname Age
0 Peter Griffin 40
1 Glenn Quagmire 35
2 Joe Swanson 38
3 Cleveland Brown 45
4 Brian Griffin 8
5 Stewie Griffin 2
6 Lois Griffin 35
Поскольку вы соответствия на два (или даже больше столбцов), один (возможно, грязный и память расточительство) может быть , создавая поддельный индексный столбец, объединив интересные столбцы в один с функцией .apply(lambda x: ...)
. Имейте в виду, что вы должны преобразовать любые не строковые поля в строках с .astype(str)
:.
#Create a new dummy column by merging all matching columns into one (in both dataframes!)
A["fake_index_col"]=A[["Name","Surname","Age"]].astype(str).apply(lambda x: "".join(x),axis=1)
B["fake_index_col"]=B[["Name","Surname","Age"]].astype(str).apply(lambda x: "".join(x),axis=1)
Это добавит фиктивный столбец в обоих dataframe, где все данные соответствия будут сжаты в один поле ,
Name Surname Age fake_index_col
0 Peter Griffin 40 PeterGriffin40
1 Glenn Quagmire 35 GlennQuagmire35
2 Joe Swanson 38 JoeSwanson38
3 Cleveland Brown 45 ClevelandBrown45
4 Brian Griffin 8 BrianGriffin8
5 Stewie Griffin 2 StewieGriffin2
6 Lois Griffin 35 LoisGriffin35
Это позволит вам легко применить обратный из isin
функции, чтобы найти гражданин Куахога, которые не являются грифонами. Наконец, удалите поддельный столбец и/или заново создайте multiindex, чтобы сохранить начальное состояние кадра данных.
C = A[~A["fake_index_col"].isin(B["fake_index_col"])]
del C["fake_index_col"]
print C
Name Surname Age
1 Glenn Quagmire 35
2 Joe Swanson 38
3 Cleveland Brown 45
Пожалуйста, покажите нам код от того, что вы пытались до сих пор, и указать, какие именно "не работает". – gus27
привет @ gus27, не могли бы вы помочь ... Я добавил код в вопрос – Mahesh
, почему это должно быть, как потянуть. Вы отправили свой код, но хотите ли вы его форматировать? нет. – e4c5