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.

Anderson Zhu
fonte
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'
Anton Protopopov
fonte
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']
PhilChang
fonte
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.

emitido
fonte
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

Baz
fonte
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.

Dheeraj Pranav
fonte