检查变量列并从匹配行中的另一列获取值

Check column for variable and get value from another column in matched row

如何通过匹配另一列中的属性来获取 csv 文件中一列的值?

CSV 文件看起来像这样:

One,Two,Three
x,car,5
x,bus,7
x,car,9
x,car,6

我只想获取第 3 列的值,前提是它们在第 2 列中的值为“car”。我也不希望添加它们,而是将它们打印在列表中,或者像这样:

5
9
6

我的方法看起来像那样,但实际上并不奏效:

import pandas as pd

df = pd.read_csv(r"example.csv")

ITEMS = [car] #I will need more items, this is just examplified

for item in df.Two:
    if item in ITEMS:
        print(df.Three)

如何获得匹配项的准确值?

在一行中你可以这样做:

print(df['Three'][df['Two']=='car'].values)

输出:

[5 9 6]

对于多个项目尝试:

df = pd.DataFrame({'One': ['x','x','x','x', 'x'],'Two': ['car','bus','car','car','jeep'],'Three': [5,7,9,6,10]})

myitems = ['car', 'bus']
res_list = []

for item in myitems:
    res_list += df['Three'][df['Two']==item].values.tolist()

print(*sorted(res_list), sep='\n')

输出:

5
6
7
9

说明

  1. df['Two']=='car' returns 一个带有布尔值 True 的 Dataframe 在行位置 Two of df 中的值是汽车
  2. .values 获取这些布尔值作为 numpy.ndarray,结果将是 [True False True True]
  3. 我们可以像这样使用布尔值列表来过滤 Three 列中的值:df['Three'][<Boolean_list>]
  4. 为了组合生成的数组,我们使用 tolist() 将每个 numpy.ndarray 转换为 python list 并将其附加到 res_list
  5. 然后我们用sorted排序res_list