在执行逐行解聚合(Pandas)更新时,难以将字段名转换为特定值



我有一个数据集,我想将特定字段名转换为值,同时执行将值分解为自己唯一的行以及执行长枢轴。

# create DataFrame
data = {
"Start": ['8/1/2013', '8/1/2013'],
"Date": ['9/1/2013', '9/1/2013'],
"End": ['10/1/2013', '10/1/2013'],
"Area": ['NY', 'CA'],
"Final": ['3/1/2023', '3/1/2023'],
"Type": ['CC', 'AA'],
"Middle Stat": [226, 130],
"Low Stat": [20, 50],
"High Stat": [10, 0],
"Middle Stat1": [0, 0],
"Low Stat1": [0, 0],
"High Stat1": [0, 0],
"Re": [0,0],
"Set": [0,0],
"Set2": [0,0],
"Set3": [0,0],
}

data = {'Start': ['8/1/2013', '8/1/2013', '8/1/2013', '8/1/2013', '8/1/2013', '8/1/2013'],
'Date': ['9/1/2013', '9/1/2013', '9/1/2013', '9/1/2013', '9/1/2013', '9/1/2013'],
'End': ['10/1/2013', '10/1/2013', '10/1/2013', '10/1/2013', '10/1/2013', '10/1/2013'],
'Area': ['NY', 'CA', 'NY', 'CA', 'NY', 'CA'],
'Final': ['3/1/2023', '3/1/2023', '3/1/2023', '3/1/2023', '3/1/2023', '3/1/2023'],
'Type': ['CC', 'AA', 'CC', 'AA', 'CC', 'AA'],
'Stat': [20, 50, 226, 130, 10, 0],
'Range': ['Low', 'Low', 'Middle', 'Middle', 'High', 'High'],
'Stat1': [0, 0, 0, 0, 0, 0],
'Re': [0, 0, 0, 0, 0, 0],
'Set': [0, 0, 0, 0, 0, 0],
'Set2': [0, 0, 0, 0, 0, 0],
'Set3': [0, 0, 0, 0, 0, 0]
}

我正在使用由SO成员提供的这个伟大的脚本,但是如何调整它以创建所需的输出进行故障排除。我需要包括所需输出中所示的所有列。

import janitor
(df
.pivot_longer(
index = slice('Start', 'Type'), 
names_to = ("Range", ".value"), 
names_sep = " ")
)

欢迎提出任何建议。

一个选项是使用pyjanitor的pivot_longer -在这种情况下,我们使用特殊占位符.value来标识我们希望保留为标题的列的部分,而其余部分则被整理成一个新列:

# pip install pyjanitor
import pandas as pd
import janitor
(df
.pivot_longer(
index = [slice('Start', 'Type'), slice('Re', 'Set3')], 
names_to = ("Range", ".value"), 
names_sep = " ")
)
Start      Date        End Area     Final Type  Re  Set  Set2  Set3   Range  Stat  Stat1
0  8/1/2013  9/1/2013  10/1/2013   NY  3/1/2023   CC   0    0     0     0  Middle   226      0
1  8/1/2013  9/1/2013  10/1/2013   CA  3/1/2023   AA   0    0     0     0  Middle   130      0
2  8/1/2013  9/1/2013  10/1/2013   NY  3/1/2023   CC   0    0     0     0     Low    20      0
3  8/1/2013  9/1/2013  10/1/2013   CA  3/1/2023   AA   0    0     0     0     Low    50      0
4  8/1/2013  9/1/2013  10/1/2013   NY  3/1/2023   CC   0    0     0     0    High    10      0
5  8/1/2013  9/1/2013  10/1/2013   CA  3/1/2023   AA   0    0     0     0    High     0      0

最新更新