extrair o valor da coluna com base em outro dataframe do pandas da coluna


109

Estou meio que preso em extrair valor de uma variável condicionando em outra variável. Por exemplo, o seguinte dataframe:

A  B
p1 1
p1 2
p3 3
p2 4

Como posso obter o valor de Aquando B=3? Sempre que extraí o valor de A, obtive um objeto, não uma string.


Entendo, devo acrescentar item()no final.
Anderson Zhu

df.querye pd.evalparecem adequados para esse caso de uso. Para obter informações sobre a pd.eval()família de funções, seus recursos e casos de uso, visite Avaliação de Expressão Dinâmica em pandas usando pd.eval () .
cs95

Respostas:


193

Você pode usar locpara obter séries que satisfaçam sua condição e, em seguida, ilocobter o primeiro elemento:

In [2]: df
Out[2]:
    A  B
0  p1  1
1  p1  2
2  p3  3
3  p2  4

In [3]: df.loc[df['B'] == 3, 'A']
Out[3]:
2    p3
Name: A, dtype: object

In [4]: df.loc[df['B'] == 3, 'A'].iloc[0]
Out[4]: 'p3'

24
Obrigado pela ajuda. df.loc[df['B'] == 3, 'A'].item()funciona para mim também.
Anderson Zhu

3
qual deles ele escolhe se o quadro de dados tem várias entradas de '3' na coluna B?
subhash

1
df.loc [df ["Condition_Column"] == 0, ("Column_1", "Column_2," Column_3 "," Column_4 ")] funciona para mim. Este exemplo para selecionar várias colunas. Devem estar em tupla.
Mustafa Uçar

se df.loc [df ['B'] == 300, 'A']. iloc [0] significa qual será a saída?
user1999109

.item () aparentemente se tornou obsoleto e será removido. Há outra maneira de fazer isso? Não estou interessado no nome da coluna ou tipo de dados que também é retornado com o método .loc para consulta.
Dan

40

Você pode tentar query, o que é menos digitar:

df.query('B==3')['A']

A consulta é interessante porque podemos adicionar cláusulas mais complexas a ela também
Samir Baid

1
IMHO, esta é a melhor resposta.
NLR

27

df[df['B']==3]['A'], presumindo que df seja seu pandas.DataFrame.


Você pode fornecer um link onde exatamente este método é descrito na documentação oficial do pandas?
vasili111

Eu quero dizer ][parte.
vasili111

11

Use df[df['B']==3]['A'].valuesse você quiser apenas o próprio item sem os colchetes


Você pode fornecer um link onde exatamente este método é descrito na documentação oficial do pandas? Eu quero dizer ][parte.
vasili111

Ele retorna o resultado com []
Sid

Você ainda precisa colocar [0]no final para acessar o valor.
rubebop

0
male_avgtip=(tips_data.loc[tips_data['sex'] == 'Male', 'tip']).mean()

Também trabalhei nessas operações de clausura e extração para minha atribuição.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.