使用Python假设有用户数据表users.csv(其中包括user_id列,age列,gender列,occupation列(包括writer,other,technician,student四个属性))完成以下任务:(1)加载数据(2)以occupation分组,求每种职业所有用户的平均年龄;(3)求每一种职业电性的占比,并按照从低到高的顺序排列;(4)获取每一种职业对应的最大和最小的用户年龄。
时间: 2024-03-25 15:35:34 浏览: 144
好的,针对你的问题,我可以给出以下代码实现:
```python
import pandas as pd
# 加载数据
users = pd.read_csv('users.csv')
# 以occupation分组,求每种职业所有用户的平均年龄
mean_age_by_occupation = users.groupby('occupation')['age'].mean()
# 求每一种职业电性的占比,并按照从低到高的顺序排列
gender_count_by_occupation = users.groupby(['occupation', 'gender'])['user_id'].count()
total_count_by_occupation = users.groupby('occupation')['user_id'].count()
gender_ratio_by_occupation = gender_count_by_occupation / total_count_by_occupation
gender_ratio_by_occupation = gender_ratio_by_occupation.unstack().sort_values(by='F')
# 获取每一种职业对应的最大和最小的用户年龄
max_age_by_occupation = users.groupby('occupation')['age'].max()
min_age_by_occupation = users.groupby('occupation')['age'].min()
```
解释一下上述代码的实现:
1. 首先使用 Pandas 库的 `read_csv()` 函数加载数据,得到一个名为 `users` 的 DataFrame。
2. 使用 `groupby()` 函数按照 `occupation` 列进行分组,然后使用 `mean()` 函数求每种职业所有用户的平均年龄,得到一个名为 `mean_age_by_occupation` 的 Series。
3. 使用 `groupby()` 函数同时按照 `occupation` 和 `gender` 两列进行分组,然后使用 `count()` 函数统计每种职业每种性别的人数,得到一个名为 `gender_count_by_occupation` 的 Series。接着,使用 `groupby()` 函数按照 `occupation` 列进行分组,然后使用 `count()` 函数统计每种职业总人数,得到一个名为 `total_count_by_occupation` 的 Series。最后,将 `gender_count_by_occupation` 除以 `total_count_by_occupation` 得到每一种职业每种性别的占比,再使用 `unstack()` 函数将性别作为列名,得到一个名为 `gender_ratio_by_occupation` 的 DataFrame。最后,使用 `sort_values()` 函数按照 `F` 列(女性占比)进行升序排序。
4. 使用 `groupby()` 函数按照 `occupation` 列进行分组,然后使用 `max()` 函数求每种职业的最大年龄,得到一个名为 `max_age_by_occupation` 的 Series。同理,使用 `min()` 函数求每种职业的最小年龄,得到一个名为 `min_age_by_occupation` 的 Series。
希望这个代码对你有所帮助。
阅读全文