Python 熊猫:基于搜索行查找列值

Python 熊猫:基于搜索行查找列值,python,pandas,dataframe,Python,Pandas,Dataframe,假设我在熊猫中有一个数据帧: import pandas as pd import numpy as np df = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(), 'B': 'one one two three two two one three'.split(), 'C': np.arange(8), 'D': np.arange(8) *

假设我在熊猫中有一个数据帧:

import pandas as pd
import numpy as np
df = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(),
                   'B': 'one one two three two two one three'.split(),
                   'C': np.arange(8), 'D': np.arange(8) * 2})
数据帧
df
如下所示

      A      B  C   D
 0  foo    one  0   0
 1  bar    one  1   2
 2  foo    two  2   4
 3  bar  three  3   6
 4  foo    two  4   8
 5  bar    two  5  10
 6  foo    one  6  12
 7  foo  three  7  14

C
等于1时,如果我想得到
D
的值,如何编写代码?换句话说,当
C=1
时,如何返回
D
值,即
2

您可以根据条件搜索数据帧(此处“C”==1),然后通过索引查找获得列

这将返回一个序列,您必须使用
.values
获取NumPy数组

>>> df
     A      B  C   D
0  foo    one  0   0
1  bar    one  1   2
2  foo    two  2   4
3  bar  three  3   6
4  foo    two  4   8
5  bar    two  5  10
6  foo    one  6  12
7  foo  three  7  14
>>> df[df["C"] == 1]["D"].values
array([2])
>>> df[df["C"] == 1]["D"].values[0]
2
>>> 
参考资料


您可以筛选并使用
.loc

result = df.loc[df.C == 1, "D"]
注释中指出的替代等效语法:

result = df.loc[df['C'].eq(1), 'D']

虽然您可以“链式”操作,例如
df[df.C==1][“D”]
将得到正确的结果,但在数据缩放时,您会遇到性能不佳的问题。

您是否尝试过使用
.loc
df.loc[df['C'].eq(1),'D']