merge
, мы можем выбрать переменную левой таблицы или правой таблицы, так же, как мы все знакомы с оператором select в SQL (EX: выберите a. * ... или выберите b. * из .....) select a.* from df1 a inner join df2 b on a.CustomerId=b.CustomerId
R: - merge(df1, df2, by.x = "CustomerId", by.y = "CustomerId")[,names(df1)]
То же самое
select b.* from df1 a inner join df2 b on a.CustomerId=b.CustomerId
merge(df1, df2, by.x = "CustomerId", by.y =
"CustomerId")[,names(df2)]
Если вы используете python3.6 или более позднюю версию, вы можете сделать это, используя __init_subclass__
, что лично для меня лучше, чем метакласс.
Пример __init_subclass__
основан на описанном сценарии использования:
class Parent:
def __init_subclass__(cls):
if not hasattr(cls, 'parameters'):
raise TypeError(f'Subclass of {cls} does not have a parameters class attribute')
def __init__(self, **kwargs):
for param in self.__class__.parameters:
self.setattr(param, kwargs.get(param))
def compare(self, other):
for param in self.__class__.parameters:
if self.getattr(param) != other.getattr(param):
return False
return True
class GoodChild(Parent):
parameters = ['length', 'height', 'width']
class BadChild(Parent):
pass
В результате возникает исключение TypeError
при создании класса BadChild
(не при его создании): [ 119]
TypeError: Subclass of <class '__main__.BadChild'> does not have a parameters class attribute