如何将连续数值转换为二进制值?及基于BirthYear列生成分类新列
嘿,针对你提出的两个问题,我来给你详细的解决方案,都是日常数据分析里常用的方法:
1. 将连续数值转换为二进制值
这里分两种场景来处理:单个数值转换,以及数据集中整列数值批量转换。
单个连续数值转二进制
Python内置的bin()函数可以直接把整数转成二进制字符串,但会带0b前缀,我们可以通过切片去掉它:
# 示例:把整数23转成二进制 num = 23 binary_result = bin(num)[2:] print(binary_result) # 输出: '10111' # 如果需要固定长度的二进制(比如8位补零),用format函数 binary_8bit = format(num, '08b') print(binary_8bit) # 输出: '00010111'
数据集中整列批量转换
假设你用的是Pandas数据集,用apply()方法就能快速处理整列:
import pandas as pd # 构造示例数据集 df = pd.DataFrame({'ContinuousValue': [10, 25, 33, 47]}) # 转换为二进制字符串(去掉0b前缀) df['BinaryValue'] = df['ContinuousValue'].apply(lambda x: bin(x)[2:]) # 转换为固定8位的二进制字符串 df['Binary8Bit'] = df['ContinuousValue'].apply(lambda x: format(x, '08b')) print(df)
输出结果:
ContinuousValue BinaryValue Binary8Bit 0 10 1010 00001010 1 25 11001 00011001 2 33 100001 00100001 3 47 101111 00101111
2. 基于BirthYear列创建年龄分组新列
你说用if函数没成功,应该是在Pandas里用了普通的Python条件语句(非向量化操作),这会报错。下面给你三种可靠的实现方法,都能完美解决需求:
方法1:用Numpy的np.where()(最简洁)
适合简单的二元/三元条件判断,还能直接处理等于1993的边界情况:
import pandas as pd import numpy as np # 构造示例数据集 df = pd.DataFrame({'BirthYear': [1980, 1995, 1993, 2000, 1975]}) # 创建新列AgeGroup:>1993为young,<1993为old,等于1993设为middle(可自定义) df['AgeGroup'] = np.where( df['BirthYear'] > 1993, 'young', np.where(df['BirthYear'] < 1993, 'old', 'middle') ) print(df)
方法2:用Pandas的apply()+自定义函数
适合更复杂的多条件判断,可读性更强:
def get_age_group(birth_year): if birth_year > 1993: return 'young' elif birth_year < 1993: return 'old' else: return 'middle' # 可根据需求修改边界值的处理逻辑 df['AgeGroup'] = df['BirthYear'].apply(get_age_group)
方法3:用Pandas的cut()函数(适合区间分组)
如果后续需要扩展更多年龄区间,这个方法更灵活:
# 定义区间和对应标签:(-∞,1993)→old,[1993,∞)→young(可调整区间包含关系) df['AgeGroup'] = pd.cut( df['BirthYear'], bins=[-np.inf, 1993, np.inf], labels=['old', 'young'], include_lowest=True # 让1993被包含在第一个区间(old),如果想放young就去掉这个参数 )
以上三种方法都能解决你的问题,优先推荐np.where(),简洁高效;如果条件复杂就用apply()+自定义函数。
内容的提问来源于stack exchange,提问作者Alex Alfaro
相关产品推荐
相关产品推荐

