Вы можете использовать pd.Series.isin
.
Для «IN» используйте: something.isin(somewhere)
Или для «NOT IN»: ~something.isin(somewhere)
В качестве обработанного примера:
>>> df
countries
0 US
1 UK
2 Germany
3 China
>>> countries
['UK', 'China']
>>> df.countries.isin(countries)
0 False
1 True
2 False
3 True
Name: countries, dtype: bool
>>> df[df.countries.isin(countries)]
countries
1 UK
3 China
>>> df[~df.countries.isin(countries)]
countries
0 US
2 Germany
this
- это указатель, а * this
- разыменованный указатель.
Если у вас есть функция, которая вернула this
, это был бы указатель на текущий объект, а функция, которая вернула * this
, была бы «клоном» текущего объекта. объект, размещенный в стеке - , если вы не указали возвращаемый тип метода для возврата ссылки.
Простая программа, которая показывает разницу между работой с копиями и ссылками:
#include <iostream>
class Foo
{
public:
Foo()
{
this->value = 0;
}
Foo get_copy()
{
return *this;
}
Foo& get_copy_as_reference()
{
return *this;
}
Foo* get_pointer()
{
return this;
}
void increment()
{
this->value++;
}
void print_value()
{
std::cout << this->value << std::endl;
}
private:
int value;
};
int main()
{
Foo foo;
foo.increment();
foo.print_value();
foo.get_copy().increment();
foo.print_value();
foo.get_copy_as_reference().increment();
foo.print_value();
foo.get_pointer()->increment();
foo.print_value();
return 0;
}
Вывод:
1
1
2
3
Вы можете видеть, что когда мы работаем с копией нашего локального объекта, изменения не выполняются. t сохраняется (потому что это совершенно другой объект), но при работе со ссылкой или указателем сохраняет изменения.
this
- указатель на экземпляр класса. * this
является ссылкой на то же самое. Они различаются так же, как int * i_ptr
и int & i_ref
.
На самом деле нет никакой разницы, this-> foo ()
то же самое, что (* this) .foo ( )
.