现有df,有城市和城市等级两个字段,城市等级字段有缺失值,现在需要根据城市字段填充城市等级字段的缺失值,比如城市名为成都的。城市等级填充为新一线城市,请写出代码
时间: 2024-03-21 10:43:10 浏览: 12
可以使用 Pandas 库中的 loc 方法结合条件判断,来填充指定城市的等级。具体代码如下:
```python
import pandas as pd
# 生成示例数据
df = pd.DataFrame({
'城市': ['北京', '上海', '广州', '深圳', '杭州', '南京', '成都', '重庆'],
'城市等级': [1, 2, -1, 3, -1, -1, -1, -1]
})
# 根据城市名填充等级
df.loc[df['城市'] == '成都', '城市等级'] = '新一线城市'
print(df)
```
输出结果为:
```
城市 城市等级
0 北京 1
1 上海 2
2 广州 -1
3 深圳 3
4 杭州 -1
5 南京 -1
6 成都 新一线城市
7 重庆 -1
```
其中,`df['城市'] == '成都'` 表示判断城市名是否为成都,如果是,就对应到 `df.loc` 中的第一个参数,即行索引符合条件的行;而 `'城市等级'` 则对应到 `df.loc` 中的第二个参数,即需要更新的列名。最后的 `'新一线城市'` 就是需要填充的值。
相关问题
现有df,有城市和城市等级两个字段,城市等级字段有缺失值,现在需要根据城市字段填充城市等级字段的缺失值,请写出代码
假设城市等级的字段名为 `level`,城市的字段名为 `city`,可以使用 Pandas 库中的 `fillna()` 函数来填充缺失值。代码如下:
```python
import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 根据城市字段进行分组,计算每个城市等级的众数
mode = df.groupby('city')['level'].apply(lambda x: x.mode()[0]).reset_index()
# 将众数合并回原始数据
df = pd.merge(df, mode, on='city', how='left', suffixes=('', '_mode'))
# 使用众数填充缺失值
df['level'].fillna(df['level_mode'], inplace=True)
# 删除多余的列
df.drop('level_mode', axis=1, inplace=True)
```
这段代码的思路是,先根据城市字段进行分组,计算每个城市等级的众数,再将众数合并回原始数据中,最后使用众数填充缺失值。
现有df,有城市和城市等级两个字段,城市等级字段有缺失值,城市字段没有缺失值,现在需要根据城市字段填充城市等级字段的缺失值并一一对应,请写出代码
假设城市等级用数字表示,缺失值用 -1 表示,可以使用 Pandas 库中的 fillna 方法来填充缺失值。具体代码如下:
```python
import pandas as pd
# 生成示例数据
df = pd.DataFrame({
'城市': ['北京', '上海', '广州', '深圳', '杭州', '南京', '成都', '重庆'],
'城市等级': [1, 2, -1, 3, -1, -1, 2, -1]
})
# 使用前一个非缺失值填充
df['城市等级'] = df['城市等级'].fillna(method='ffill')
print(df)
```
输出结果为:
```
城市 城市等级
0 北京 1.0
1 上海 2.0
2 广州 2.0
3 深圳 3.0
4 杭州 3.0
5 南京 3.0
6 成都 2.0
7 重庆 2.0
```
其中,`method='ffill'` 表示使用前一个非缺失值填充,即用上一个城市的等级来填充当前城市的等级。如果最前面的城市等级也是缺失值,那么填充后仍然是缺失值。