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