Gemini
Gemini

Reputation: 475

Access Row Based on Column Value

I have the following pandas dataframe:

data = {'ID': [1, 2, 3], 'Neighbor': [3, 1, 2], 'x': [5, 6, 7]}

Now I want to create a new column 'y', which for each row is the value of the field x, from that row referenced by the neighbor column (ie that column, whose ID equals the value of Neighbor), e.g: For row 0 (ID 1), 'Neighbor' is 3, thus 'y' should be 7. So the resulting dataframe should have the colum y = [7, 5, 6]. Can I solve this without using df.apply? (As this is rather time-consuming for my big dataframes.) I would like to use sth like

df.loc[:, 'y'] = df.loc[df.Neighbor.eq(df.ID), 'x']}

but this returns NaN.

Upvotes: 1

Views: 127

Answers (1)

Umar.H
Umar.H

Reputation: 23099

we can pass a dict from your ID and X columns then map these into your new column

your_dict_ = dict(zip(df['ID'],df['x']))
print(your_dict_)
{1: 5, 2: 6, 3: 7}

Then we can use .map to pass these your column using the Neighbor column as the key.

df['Y'] = df['Neighbor'].map(your_dict_)
print(df)
    ID  Neighbor  x  Y
0   1         3  5  7
1   2         1  6  5
2   3         2  7  6

Upvotes: 1

Related Questions