我正在寻找一种方法来分解数据从一个单行在一个Pandasdf。
我的数据如下所示
编辑:n 代表一个未指定的数字,例如,在我的工作数据集中,我有8个图,给我8 x 2 = 16列,我想转换。
data = {
'key':['k1', 'k2'],
'plot_name_1':['name', 'name'],
'plot_area_1':[1,2],
'plot_name_2':['name', 'name'],
'plot_area_2':[1,2],
'plot_name_n':['name', 'name'],
'plot_area_n':[1,2]
}
df = pd.DataFrame(data)
我想在这里结束,添加一个额外的列来标识地块编号:
data = {
'key':['k1','k1','k1', 'k2', 'k2', 'k2'],
'plot_number':['1', '2', 'n','1', '2', 'n'],
'plot_name':['name', 'name','name', 'name','name', 'name'],
'plot_area':[1,2,1,2,1,2],
}
df = pd.DataFrame(data)
2条答案
按热度按时间z31licg01#
pd.wide_to_long可以做到这一点:
其中
suffix=r"\d+"
顺便说一句,当可能有多个后缀时,我们需要对正则表达式进行paranthesize,因为Pandas在构造正则表达式时使用了
suffix
:我们可以看到
suffix
是直接插值的,其中的一个交流发电机(即|
)将看到左边不仅是\d+
,而且也是来自stub & sep的。cbeh67ev2#
一个选项是使用pivot_longger从pyjanitor进行整形,使用正则表达式捕获组:
.value
确定列的哪些部分保留为标题