我有这个数据框:
pd.DataFrame({'day': [1, 1, 2, 2], 'category': ['a', 'b', 'a', 'b'],
'min_feature1': [1, 2, 3, 4], 'max_feature1': [8, 9, 10, 11],
'min_feature2': [2, 3, 4, 5], 'max_feature2': [6, 9, 12, 13]})
结果如下所示:
| 日|范畴|最小特征1|最大特征1|最小特征2|最大功能2|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 1个|项目a|1个|八个|第二章|六个|
| 1个|B|第二章|九|三个|九|
| 第二章|项目a|三个|十个|四个|十二|
| 第二章|B|四个|十一|五个|十三|
我想转换这些数据,看起来像这样:
pd.DataFrame([[1, 'a', 'feature1', 1, 8],
[1, 'a', 'feature2', 2, 6],
[1, 'b', 'feature1', 2, 9],
[1, 'b', 'feature2', 3, 9],
[2, 'a', 'feature1', 3, 10],
[2, 'a', 'feature2', 4, 12],
[2, 'b', 'feature1', 4, 11],
[2, 'b', 'feature2', 5, 13],], columns=['day', 'category', 'feature', 'min', 'max'])
| 日|范畴|特征|最小值|最大值|
| - ------|- ------|- ------|- ------|- ------|
| 1个|项目a|功能1|1个|八个|
| 1个|项目a|功能2|第二章|六个|
| 1个|B|功能1|第二章|九|
| 1个|B|功能2|三个|九|
| 第二章|项目a|功能1|三个|十个|
| 第二章|项目a|功能2|四个|十二|
| 第二章|B|功能1|四个|十一|
| 第二章|B|功能2|五个|十三|
我该怎么做呢?
3条答案
按热度按时间soat7uwm1#
一个选项使用带有多索引的自定义整形,先
str.split
,然后stack
:或者使用
janitor
的pivot_longer
:输出:
c2e8gylq2#
将
str.split
用于MultiIndex
,并通过DataFrame.stack
进行整形:wide_to_long
的另一个想法是:i86rm4rw3#
您也可以使用
melt
作为替代:输出:
为了更好地理解转型,请循序渐进: