extract column value based on another column pandas dataframe

PythonPandasDataframe

Python Problem Overview


I am kind of getting stuck on extracting value of one variable conditioning on another variable. For example, the following dataframe:

A  B
p1 1
p1 2
p3 3
p2 4

How can I get the value of A when B=3? Every time when I extracted the value of A, I got an object, not a string.

Python Solutions


Solution 1 - Python

You could use loc to get series which satisfying your condition and then iloc to get first element:

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'

Solution 2 - Python

You can try query, which is less typing:

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

Solution 3 - Python

df[df['B']==3]['A'], assuming df is your pandas.DataFrame.

Solution 4 - Python

Use df[df['B']==3]['A'].values[0] if you just want item itself without the brackets

Solution 5 - Python

Edited: What I described below under Previous is chained indexing and may not work in some situations. The best practice is to use loc, but the concept is the same:

df.loc[row, col]

row and col can be specified directly (e.g., 'A' or ['A', 'B']) or with a mask (e.g. df['B'] == 3). Using the example below:

df.loc[df['B'] == 3, 'A']

Previous: It's easier for me to think in these terms, but borrowing from other answers. The value you want is located in a dataframe:

df[*column*][*row*]

where column and row point to the values you want returned. For your example, column is 'A' and for row you use a mask:

df['B'] == 3

To get the first matched value from the series there are several options:

df['A'][df['B'] == 3].values[0]
df['A'][df['B'] == 3].iloc[0]
df['A'][df['B'] == 3].to_numpy()[0]

Solution 6 - Python

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

I have also worked on this clausing and extraction operations for my assignment.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionGejunView Question on Stackoverflow
Solution 1 - PythonAnton ProtopopovView Answer on Stackoverflow
Solution 2 - PythonPhilChangView Answer on Stackoverflow
Solution 3 - PythonemitedView Answer on Stackoverflow
Solution 4 - PythonBazView Answer on Stackoverflow
Solution 5 - PythondrTView Answer on Stackoverflow
Solution 6 - PythonDheeraj PranavView Answer on Stackoverflow