我有以下数据框

salesman north_access south_access east_access west_access
A 1 0 0 1
B 0 1 1 1
C 1 0 1 1

我想将上面的格式转换为下面的格式

salesman direction access
A north 1
A south 0
A east 0
A west 1
B north 0
B south 1
B east 1
B west 1

我试着try 拆分和转置功能,但没有得到预期的结果. 有没有人能帮个忙,在代码中做以上的修改,提前谢谢.

推荐答案

另一种解决方案(使用pd.wide_to_long):

df.columns = [f'access_{c.split("_")[0]}' if "_access" in c else c for c in df.columns]

x = pd.wide_to_long(
    df, stubnames="access", suffix=r".*", i=["salesman"], j="direction", sep="_"
).reset_index()
print(x)

打印:

   salesman direction  access
0         A     north       1
1         B     north       0
2         C     north       1
3         A     south       0
4         B     south       1
5         C     south       0
6         A      east       0
7         B      east       1
8         C      east       1
9         A      west       1
10        B      west       1
11        C      west       1

Python相关问答推荐

为什么自定义pytree aux_data对于jnp.数组来说在.jit()之后跟踪,而对于np.数组来说则不是?

为什么使用SciPy中的Distance. cos函数比直接执行其Python代码更快?

如何将自动创建的代码转换为类而不是字符串?

如何在Pygame中绘制右对齐的文本?

sys.modulesgo 哪儿了?

在Transformer中使用LabelEncoding的ML模型管道

避免循环的最佳方法

将行从一个DF添加到另一个DF

根据网格和相机参数渲染深度

Polars比较了两个预设-有没有方法在第一次不匹配时立即失败

使用新的类型语法正确注释ParamSecdecorator (3.12)

Pandas 都是(),但有一个门槛

C#使用程序从Python中执行Exec文件

pyscript中的压痕问题

Odoo 16使用NTFS使字段只读

pandas在第1列的id,第2列的标题,第3列的值,第3列的值?

如果初始groupby找不到满足掩码条件的第一行,我如何更改groupby列,以找到它?

在单次扫描中创建列表

Python全局变量递归得到不同的结果

Python—转换日期:价目表到新行