
在数据分析和处理过程中,我们经常需要根据dataframe中某一列的复杂条件来生成或更新另一列的值。例如,从一个包含混合字符串和数字的列中提取数字,并根据这些数字的特点(如数值大小范围或数字的位数)进行分类赋值。本教程将展示两种高效且专业的pandas解决方案来解决这类问题。
首先,我们构建一个示例DataFrame,它包含Server和Port两列。Port列是一个字符串,其中包含"Ethernet"前缀和随后的一个或多个数字。
import pandas as pd
import numpy as np
data = {
'Server': ['Ser123', 'Ser123', 'Ser123', 'Ser123', 'Serabc', 'Serabc', 'Serabc', 'Serabc'],
'Port': ['Ethernet3', 'Ethernet4', 'Ethernet12', 'Ethernet567', 'Ethernet2', 'Ethernet34', 'Ethernet458', 'Ethernet5689']
}
df = pd.DataFrame(data)
print("原始DataFrame:")
print(df)输出:
原始DataFrame: Server Port 0 Ser123 Ethernet3 1 Ser123 Ethernet4 2 Ser123 Ethernet12 3 Ser123 Ethernet567 4 Serabc Ethernet2 5 Serabc Ethernet34 6 Serabc Ethernet458 7 Serabc Ethernet5689
我们的目标是创建一个名为function_val的新列,其值将根据Port列中数字部分的特性来决定。具体规则如下:
这种方法适用于根据提取出的数字的数值大小范围进行分类。
# 定义数值区间和对应的标签
bins = [0, 10, 100, np.inf] # 0 < x <= 10, 10 < x <= 100, 100 < x <= inf
labels = ['5k', '10k', '20k']
# 提取数字,转换为整数,并使用pd.cut进行分类赋值
df['function_val_cut'] = pd.cut(
df['Port'].str.extract(r'(\d+)$', expand=False).astype(int),
bins=bins,
labels=labels,
right=True # 默认右闭合,即 (bin_i, bin_i+1]
)
print("\n使用pd.cut分类后的DataFrame:")
print(df)输出:
使用pd.cut分类后的DataFrame: Server Port function_val_cut 0 Ser123 Ethernet3 5k 1 Ser123 Ethernet4 5k 2 Ser123 Ethernet12 10k 3 Ser123 Ethernet567 20k 4 Serabc Ethernet2 5k 5 Serabc Ethernet34 10k 6 Serabc Ethernet458 20k 7 Serabc Ethernet5689 NaN
注意事项:
这种方法适用于根据提取出的数字的位数进行分类。
# 定义位数和对应的标签映射
labels_by_digits = {1: '5k', 2: '10k', 3: '20k', 4: '20k'} # 假设4位也对应20k
# 提取数字,转换为整数,计算位数,并使用map进行赋值
df['function_val_digits'] = (
np.ceil(np.log10(df['Port'].str.extract(r'(\d+)$', expand=False).astype(int) + 1))
.map(labels_by_digits)
)
print("\n使用位数映射分类后的DataFrame:")
print(df)输出:
使用位数映射分类后的DataFrame: Server Port function_val_cut function_val_digits 0 Ser123 Ethernet3 5k 5k 1 Ser123 Ethernet4 5k 5k 2 Ser123 Ethernet12 10k 10k 3 Ser123 Ethernet567 20k 20k 4 Serabc Ethernet2 5k 5k 5 Serabc Ethernet34 10k 10k 6 Serabc Ethernet458 20k 20k 7 Serabc Ethernet5689 NaN 20k
注意事项:
本文展示了在Pandas DataFrame中根据复杂条件(特别是从字符串中提取数字并基于其数值或位数)创建新列的两种强大方法:
在实际应用中,选择哪种方法取决于具体的业务逻辑和分类需求。无论哪种方法,以下几点都是通用的最佳实践:
通过掌握这些Pandas技巧,您可以更高效、更灵活地处理和转换DataFrame中的数据,满足各种复杂的数据处理需求。
以上就是Pandas DataFrame中基于字符串数字的高级条件赋值技巧的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号