Чтобы добавить к этому известному вопросу (хотя и слишком поздно): вы также можете сделать df.groupby('column_name').get_group('column_desired_value').reset_index()
, чтобы создать новый фрейм данных с указанным столбцом, имеющим определенное значение. Например,
import pandas as pd
df = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(),
'B': 'one one two three two two one three'.split()})
print("Original dataframe:")
print(df)
b_is_two_dataframe = pd.DataFrame(df.groupby('B').get_group('two').reset_index()).drop('index', axis = 1)
#NOTE: the final drop is to remove the extra index column returned by groupby object
print('Sub dataframe where B is two:')
print(b_is_two_dataframe)
Запустите это:
Original dataframe:
A B
0 foo one
1 bar one
2 foo two
3 bar three
4 foo two
5 bar two
6 foo one
7 foo three
Sub dataframe where B is two:
A B
0 foo two
1 foo two
2 bar two
Вот фрагмент кода для соглашений с вопросом. Используя "частный" в определении класса не относится к методам класса. Необходимо использовать "private_class_method" в качестве в следующем примере.
class Foo
def self.private_bar
# Complex logic goes here
puts "hi"
end
private_class_method :private_bar
class <<self
private
def another_private_bar
puts "bar"
end
end
public
def instance_bar
self.class.private_bar
end
def instance_bar2
self.class.another_private_bar
end
end
f=Foo.new
f=instance_bar # NoMethodError: private method `private_bar' called for Foo:Class
f=instance_bar2 # NoMethodError: private method `another_private_bar' called for Foo:Class
я не вижу способ обойти это. В документации говорится, что Вы не можете указать получение закрытого метода. Также можно только получить доступ к закрытому методу от того же экземпляра. Класс Foo является другим объектом, чем приведенный пример Foo.
не берут мой ответ в качестве финала. Я - конечно, не эксперт, но я хотел обеспечить фрагмент кода так, чтобы у других, которые пытаются ответить, были правильно частные методы класса.
Если я не неправильно понимаю, не делайте Вас, просто нуждаются в чем-то вроде этого:
class Foo
private
def Foo.bar
# Complex logic goes here
puts "hi"
end
public
def bar
Foo.bar
end
end
, Конечно, Вы могли изменить второе определение для использования подхода self.class.send, если бы Вы хотели избежать жесткого кодирования имя класса...