基于另一列pandas dataframe提取列值

And*_*Zhu 86 python dataframe pandas

我有点卡在另一个变量上提取一个变量条件的值.例如,以下数据帧:

A  B
p1 1
p1 2
p3 3
p2 4
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得A何时的价值B=3?每当我提取值时A,我得到一个对象,而不是一个字符串.

Ant*_*pov 138

您可以使用loc获得满足您条件的系列,然后iloc获得第一个元素:

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'
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的帮助.`df.loc [df ['B'] == 3,'A'].item()`也适用于我. (14认同)
  • 如果数据框的B列中有多个条目“ 3”,它将选择哪一个? (2认同)

小智 25

df[df['B']==3]['A'],假设df是你的pandas.DataFrame.

  • 最后添加一个 .item() 。 (5认同)

Phi*_*ang 25

您可以尝试query,这是更少的输入:

df.query('B==3')['A']
Run Code Online (Sandbox Code Playgroud)

  • 恕我直言,这是最好的答案。 (3认同)

Baz*_*Baz 17

df[df['B']==3]['A'].values如果您只想要没有括号的项目本身,请使用

  • 您仍然需要将“[0]”放在末尾才能访问该值。 (2认同)

drT*_*drT 9

用这些术语来思考对我来说更容易,但可以借鉴其他答案。您想要的值位于系列中:

df[*column*][*row*]
Run Code Online (Sandbox Code Playgroud)

其中columnrow指向您要返回的值。对于您的示例,是“A”,对于行,您使用掩码:

df['B'] == 3
Run Code Online (Sandbox Code Playgroud)

要从系列中获取第一个匹配值,有几个选项:

df['A'][df['B'] == 3].values[0]
df['A'][df['B'] == 3].iloc[0]
df['A'][df['B'] == 3].to_numpy()[0]
Run Code Online (Sandbox Code Playgroud)