我有点不耐烦地在另一个变量上提取一个变量条件的值。例如,以下数据框:
A B
p1 1
p1 2
p3 3
p2 4
如何在A
时获得B=3
的价值?每当我提取A
的值时,我得到一个对象,而不是字符串。
答案 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和提取操作。