我确信这个问题有一个简单的解决方案,但我似乎无法找到它。
我正在尝试检查列表中的年龄是否在我的数据框的年龄列中。但是,它只与索引而不是列进行比较。
以下是我的程序中的一段简化代码:
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])
我做错了什么?
答案 0 :(得分:1)
在您的代码中,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)
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']