Olá, Matheus! Tudo tranquilo por aí?
Primeiramente caso você não possua familiaridade com orientação a objetos, sugiro a leitura desse artigo.
Essas diferenciações se devem ao paradigma de programação, que é orientação a objetos, com a qual a biblioteca Pandas é desenvolvida.
Quando o método não depende de um objeto da biblioteca Pandas, então precisamos do pd, que é o apelido do pandas, para dizermos pro Python que estamos acessando uma função da biblioteca. Quando você já possui um objeto do pandas, como por exemplo uma Series ou um DataFrame, esses objetos já possuem alguns métodos e aí não é necessário explicitar pro Python o pd, já é reconhecido automaticamente. Nessa outra resposta é explicada diferença de Series e DataFrame.
Uma dica, que eu utilizo, é sempre olhar a documentação e ver o título que está lá. Vamos a um exemplo.
1. read_csv:
# Título na documentação:
pandas.read_csv
Quando vier assim, pandas seguido do nome do método, significa que só depende da instalação da biblioteca e não de algum objeto, então faz-se necessário o uso sempre do pd para dizer ao Python que estamos acessando um método da biblioteca Pandas
2. value_counts:
# Título na documentação:
pandas.Series.value_count
Agora, antes do value_count, temos Series, que é um objeto do pandas que o read_csv (e outras funções) retorna. Então nesses casos não é necessário o uso pd, pois como é um objeto da biblioteca Pandas, já fica subentendido para o Python.
Espero ter ajudado, mas se ainda persistir alguma dúvida me retorne por aqui para sanarmos.
:)
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!