我有以下格式的数据框:
df = pd.DataFrame({'Date': np.repeat(['20190101', '20190102'], 8),
'Category': list(np.repeat(['A', 'B'], 4))*2,
'Sub-Category': list(np.repeat(['X', 'Y'], 2))*4,
'Samples': range(16)})
# print(df)
Date Category Sub-Category Samples
0 20190101 A X 0
1 20190101 A X 1
2 20190101 A Y 2
3 20190101 A Y 3
4 20190101 B X 4
5 20190101 B X 5
6 20190101 B Y 6
7 20190101 B Y 7
8 20190102 A X 8
9 20190102 A X 9
10 20190102 A Y 10
11 20190102 A Y 11
12 20190102 B X 12
13 20190102 B X 13
14 20190102 B Y 14
15 20190102 B Y 15
在每个日期内,有一个类别,在每个类别内有多个子类别。此外,每个子类别都有多个样本。
我想要做的是将“子类别”列从长格式转换为宽格式,而不像这样跨样本进行任何聚合:
desired_df = pd.DataFrame({'Date': np.repeat(['20190101', '20190102'], 4),
'Category': list(np.repeat(['A', 'B'], 2))*2,
'X': [0, 1, 4, 5, 8, 9, 12, 13],
'Y': [2, 3, 6, 7, 10, 11, 14, 15]
})
# print(desired_df)
Date Category X Y
0 20190101 A 0 2
1 20190101 A 1 3
2 20190101 B 4 6
3 20190101 B 5 7
4 20190102 A 8 10
5 20190102 A 9 11
6 20190102 B 12 14
7 20190102 B 13 15
我想我已经找到了一种方法来实现这一点,但感觉很丑陋和 hacky:它涉及首先为样本编号创建一个新列,然后创建一个将所有这些信息组合在一起的新索引,旋转,然后分离一切又出来了
我的问题:有没有更好、更有效的方法来解决这个问题?
慕田峪7331174
相关分类