基于另一列pandas dataframe提取列值

时间:2016-04-18 01:12:53

标签: python pandas dataframe

我有点不耐烦地在另一个变量上提取一个变量条件的值。例如,以下数据框:

A  B
p1 1
p1 2
p3 3
p2 4

如何在A时获得B=3的价值?每当我提取A的值时,我得到一个对象,而不是字符串。

6 个答案:

答案 0 :(得分:97)

你可以使用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'

答案 1 :(得分:20)

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

答案 2 :(得分:18)

您可以尝试query,这样可以减少打字:

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

答案 3 :(得分:1)

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

df[*column*][*row*]

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

df['B'] == 3

要从系列中获取值,有几种选择:

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

答案 4 :(得分:0)

如果您只希望项目本身不带括号,请使用df[df['B']==3]['A'].values

答案 5 :(得分:-1)

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

我还为我的任务进行了这种clause和提取操作。