我的年龄数据是浮动的,我想创建一个具有三个值的新类别列:老年人,儿童和成人。我定义了一个函数,并添加了 <iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3652.6095451920282!2d90.38946702923724!3d23.72563358206513!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x3755b8dd3d3673e7%3A0xf999f4771c24183e!2sInstitute+of+AppropriateTechnology!5e0!3m2!1sen!2sbd!4v1519796378399" width="100%" height="450" frameborder="0" style="border: 0"></iframe>
来迭代现有df ['Age']列中的各个值。但是,我的成绩始终是“长辈”,只有一个独特的成绩。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
答案 0 :(得分:0)
在Series.apply
中添加参数axis=1
以使用标量函数-按值处理:
def ages(a):
if (a > 50):
return 'Elder'
elif (a < 12):
return 'Child'
else:
return 'Adult'
df['Agem']=df['Age'].apply(ages)
使用numpy.select
的快速解决方案:
m1 = df['Age'] > 50
m2 = df['Age'] < 12
df['Agem']= np.select([m1, m2], ['Elder','Child'], default='Adult')
性能:
np.random.seed(123)
df = pd.DataFrame(np.random.randint(100, size=1000), columns=['Age'])
#print (df)
def ages(a):
if (a > 50):
return 'Elder'
elif (a < 12):
return 'Child'
else:
return 'Adult'
df['Agem']=df['Age'].apply(ages)
m1 = df['Age'] > 50
m2 = df['Age'] < 12
df['Agem1']= np.select([m1, m2], ['Elder','Child'], default='Adult')
#print (df)
In [157]: %timeit df['Agem']=df['Age'].apply(ages)
577 µs ± 37.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [158]: %timeit df['Agem1']= np.select([m1, m2], ['Elder','Child'], default='Adult')
244 µs ± 1.08 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
答案 1 :(得分:0)
pd.Series.apply
pd.Series.apply
通过函数提供一系列的每个值。因此,您无需在函数中使用iloc
:
def ages(a):
if a > 50:
return 'Elder'
elif a < 12:
return 'Child'
else:
return 'Adult'
df['Agem'] = df['Age'].apply(ages)
pd.cut
更有效地,您可以使用pd.cut
将您的年龄“分类”到类别中。这样做的好处是,您得到的系列将具有Categorical
dtype,具有效率/存储优势。
df['Agem'] = pd.cut(df['Age'], bins=[0, 12, 50, np.inf],
labels=['Child', 'Adult', 'Elder'])
print(df)
Age Agem
0 10 Child
1 15 Adult
2 20 Adult
3 35 Adult
4 45 Adult
5 50 Adult
6 70 Elder
print(df.dtypes)
Age int64
Agem category
dtype: object