我有点困在提取一个变量的值的条件下,另一个变量。例如,下面的数据帧:

A  B
p1 1
p1 2
p3 3
p2 4

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


Try:

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

假设df是你的pandas.DataFrame。


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

你可以试试query,这样打字就少了:

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

使用df (df [B] = = 3] [A]。如果您只想要item本身不带括号,则值为[0]


df.loc[df['B']=='give-specific-value', 'A']````

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

编辑:我在前面所描述的是链式索引,在某些情况下可能不起作用。最佳实践是使用loc,但概念是相同的:

df.loc[row, col]

row和col可以直接指定(例如,'A'或['A', 'B'])或带掩码(例如,df['B'] == 3)。使用下面的示例:

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

前情提要:用这些术语来思考对我来说更容易,但借鉴了其他答案。你想要的值位于一个数据框架中:

df[*column*][*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]

你可以使用squeeze代替iloc[0]。如果你只有一个值,它看起来更清晰:

df.loc[df['B'] == 3, 'A'].squeeze()

输出:

'p3'