根据Pandas中的另一列提取列值

carvr3hs  于 2022-11-20  发布在  其他
关注(0)|答案(7)|浏览(211)

我在提取一个变量的值时遇到了一些麻烦。例如,下面的 Dataframe :

A  B
p1 1
p1 2
p3 3
p2 4

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

f0ofjuux

f0ofjuux1#

您可以使用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'
3zwjbxry

3zwjbxry2#

您可以尝试query,它的输入量更少:

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

lx0bsm1f3#

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

dnph8jn4

dnph8jn44#

如果您只需要项目本身而不需要括号,请使用df[df['B']==3]['A'].values[0]

pgccezyw

pgccezyw5#

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

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

上一页:我认为用这些术语思考更容易,但要借用其他答案。

df[*column*][*row*]

其中,columnrow 指向要返回的值。对于您的示例,column 为'A',而对于 row,您使用了掩码:

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]
ssgvzors

ssgvzors6#

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

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

输出量:

'p3'
pftdvrlh

pftdvrlh7#

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

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

相关问题