Python / Pandas if语句和索引

时间:2016-07-25 11:20:39

标签: python function pandas if-statement dataframe

我确信这个问题有一个简单的解决方案,但我似乎无法找到它。

我正在尝试检查列表中的年龄是否在我的数据框的年龄列中。但是,它只与索引而不是列进行比较。

以下是我的程序中的一段简化代码:

def findages(data,ages):
    for age in ages:
        if age in data['age']:
            print('yes')
        else:
            print('no')

我也试过这个:

def findages(data,ages):
    for age in ages:
        if age in data.loc[data['age']]:
            print('yes')
        else:
            print('no')

数据框看起来像这样

                 age     x     Lambda             L
0       1.258930e+05  0.01       91.0  5.349000e+25
1       1.258930e+05  0.01       94.0  1.188800e+26
2       1.258930e+05  0.01       96.0  1.962700e+26
3       1.258930e+05  0.01       98.0  3.169400e+26   
4       1.258930e+05  0.01      100.0  5.010800e+26

和这样的列表:

ages = ([125893.0, 4e7,5e9])

我做错了什么?

2 个答案:

答案 0 :(得分:1)

DataFrame列访问返回一个Series

在您的代码中,data['age']返回了一系列列age。在这种情况下,in运算符将与索引进行比较。要与系列中的值进行比较,请使用.values属性获取系列值的数组。

例如:

import pandas as pd

df = pd.DataFrame({'age':[33, 34], 'pet':['Dog', 'Cat']}, index=['Bob', 'Mary'])

ages = [5, 33, 67]

def findages(data, ages):
    for age in ages:
        if age in data['age'].values:
            print('yes')
        else:
            print('no')

findages(df, ages)
no
yes
no

答案 1 :(得分:0)

numpy.where使用isin

np.where(data['age'].isin(ages),'yes','no')

样品:

import pandas as pd
import numpy as np

data = pd.DataFrame({'age':[10,20,30]})
ages = [10,30]
print (data)
   age
0   10
1   20
2   30

data['new'] = np.where(data['age'].isin(ages),'yes','no')
print (data)
   age  new
0   10  yes
1   20   no
2   30  yes

按样本编辑:

print (data)
        age     x  Lambda             L
0  125893.0  0.01    91.0  5.349000e+25
1  125893.0  0.01    94.0  1.188800e+26
2  125893.0  0.01    96.0  1.962700e+26
3  125893.0  0.01    98.0  3.169400e+26
4  125893.0  0.01   100.0  5.010800e+26

ages = ([125893.0, 4e7,5e9])
print (np.where(data['age'].isin(ages),'yes','no'))
['yes' 'yes' 'yes' 'yes' 'yes']