如何用Python将宽格式Dataframe转换为含方向权限的长格式?
解决方案
直接用pandas的melt()函数就能快速完成宽表转长表的需求,搭配字符串处理提取方向信息即可。以下是完整实现代码:
import pandas as pd # 构造示例宽格式DataFrame(模拟你的数据) df_wide = pd.DataFrame({ 'salesman': ['张三', '李四', '王五'], 'north_access': [True, False, True], 'south_access': [False, True, False], 'east_access': [True, True, False], 'west_access': [False, False, True] }) # 转换为长格式 df_long = pd.melt( df_wide, id_vars=['salesman'], # 保留的标识符列 var_name='direction', # 原列名转换后的新列名 value_name='access' # 原列值对应的新列名 ) # 从direction列中提取方向(去掉末尾的_access) df_long['direction'] = df_long['direction'].str.replace('_access', '', regex=False) print(df_long)
代码说明
melt()是pandas专门用于宽表转长表的函数,id_vars指定不需要转换的列(这里是salesman),剩下的列会被统一转换为direction和access两列。- 最后用
str.replace()去掉direction列里的_access后缀,得到干净的方向名称(north、south等)。
运行后你会得到如下格式的结果:
salesman direction access 0 张三 north True 1 李四 north False 2 王五 north True 3 张三 south False 4 李四 south True 5 王五 south False 6 张三 east True 7 李四 east True 8 王五 east False 9 张三 west False 10 李四 west False 11 王五 west True
内容的提问来源于stack exchange,提问作者Bruce Wayne 0005
相关产品推荐
相关产品推荐

