Pandas:根据搜索行查找列值[重复]

Posted

技术标签:

【中文标题】Pandas:根据搜索行查找列值[重复]【英文标题】:Pandas: find the column value based on searching the row [duplicate] 【发布时间】:2021-07-31 09:51:26 【问题描述】:

假设我在 Pandas 中有一个数据框:

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 时,如何返回D2

【问题讨论】:

您是否尝试过使用 .loc 对数据框进行切片? df.loc[df['C'].eq(1), 'D'] 【参考方案1】:

你可以过滤使用.loc:

result = df.loc[df.C == 1, "D"]

在 cmets 中注明的替代等效语法:

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

虽然您可以“链式操作,例如 df[df.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
>>> 

参考文献

Selecting rows in pandas DataFrame based on conditions

【讨论】:

以上是关于Pandas:根据搜索行查找列值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python/Pandas - 按列值删除重复行

Pandas - 获取行匹配条件的列值[重复]

pandas根据两个条件设置列值[重复]

Python pandas:选择列值为null / None / nan的行[重复]

pyspark 根据列值删除重复行

遍历 pandas 行并根据其他列中的值设置列值