根据指定条件更新 DataFrame 指定列

197 阅读3分钟

除了使用 applynp.where 方法来更新 DataFrame 列,pandas 还提供了其他几种方法可以用来根据条件更新列。下面我将介绍几种常用的方法:

方法 0:使用 numpynp.where 方法来实现效果:


import pandas as pd
import numpy as np

# 创建示例 DataFrame
data = {
    '品类': ['音箱配件临时', '指纹锁', '其他类别', '指纹锁', '音箱配件临时']
}
main_3c = pd.DataFrame(data)

# 使用 np.where 根据条件更新 '品类' 列
main_3c['品类'] = np.where(main_3c['品类'] == '音箱配件临时', '音箱/音响', 
                   np.where(main_3c['品类'] == '指纹锁', '电子锁', main_3c['品类']))

# 打印结果
print(main_3c)

方法 1:使用 .loc 方法

.loc 方法可以用于基于条件选择和更新 DataFrame 的部分。

import pandas as pd

# 创建示例 DataFrame
data = {
    '品类': ['音箱配件临时', '指纹锁', '其他类别', '指纹锁', '音箱配件临时']
}
main_3c = pd.DataFrame(data)

# 使用 .loc 方法根据条件更新 '品类' 列
main_3c.loc[main_3c['品类'] == '音箱配件临时', '品类'] = '音箱/音响'
main_3c.loc[main_3c['品类'] == '指纹锁', '品类'] = '电子锁'

# 打印结果
print(main_3c)

方法 2:使用字典和 .replace 方法

replace 方法可以用于将列中的值替换为新值。

import pandas as pd

# 创建示例 DataFrame
data = {
    '品类': ['音箱配件临时', '指纹锁', '其他类别', '指纹锁', '音箱配件临时']
}
main_3c = pd.DataFrame(data)

# 使用 .replace 方法根据条件更新 '品类' 列
replace_dict = {
    '音箱配件临时': '音箱/音响',
    '指纹锁': '电子锁'
}
main_3c['品类'] = main_3c['品类'].replace(replace_dict)

# 打印结果
print(main_3c)

方法 3:使用 map 方法

map 方法适用于将一列中的值映射为另一列中的值。

import pandas as pd

# 创建示例 DataFrame
data = {
    '品类': ['音箱配件临时', '指纹锁', '其他类别', '指纹锁', '音箱配件临时']
}
main_3c = pd.DataFrame(data)

# 使用 map 方法根据条件更新 '品类' 列
map_dict = {
    '音箱配件临时': '音箱/音响',
    '指纹锁': '电子锁'
}
main_3c['品类'] = main_3c['品类'].map(map_dict).fillna(main_3c['品类'])

# 打印结果
print(main_3c)

方法 4:使用 mask 方法

mask 方法可以用于根据条件替换值。

import pandas as pd

# 创建示例 DataFrame
data = {
    '品类': ['音箱配件临时', '指纹锁', '其他类别', '指纹锁', '音箱配件临时']
}
main_3c = pd.DataFrame(data)

# 使用 mask 方法根据条件更新 '品类' 列
main_3c['品类'] = main_3c['品类'].mask(main_3c['品类'] == '音箱配件临时', '音箱/音响')
main_3c['品类'] = main_3c['品类'].mask(main_3c['品类'] == '指纹锁', '电子锁')

# 打印结果
print(main_3c)

方法 5:使用 applymap 方法(适用于更新整个 DataFrame)

如果你需要更新整个 DataFrame 的值,可以使用 applymap 方法。

import pandas as pd

# 创建示例 DataFrame
data = {
    '品类': ['音箱配件临时', '指纹锁', '其他类别', '指纹锁', '音箱配件临时'],
    '其他列': ['值1', '值2', '值3', '值4', '值5']
}
main_3c = pd.DataFrame(data)

# 使用 applymap 方法更新整个 DataFrame
def replace_values(x):
    if x == '音箱配件临时':
        return '音箱/音响'
    elif x == '指纹锁':
        return '电子锁'
    return x

main_3c = main_3c.applymap(replace_values)

# 打印结果
print(main_3c)

这些方法各有优缺点,选择哪种方法取决于你的具体需求和 DataFrame 的规模。例如,apply 方法适用于复杂的行级别逻辑,而 .locnp.where 方法通常在性能方面更优。