我很困扰一个特定的问题,就是将数据重塑成正确的格式。
我的数据如下:
Date Hour Category Col1 Col2
1/1/10 1:00 1 France 1.1 1.2
1/1/10 2:00 2 France 2.9 1.4
1/1/10 1:00 1 UK 3.8 2.3
2/1/10 1:00 1 France 1.4 1.0
2/1/10 1:00 1 UK 1.1 0.1
2/1/10 2:00 2 UK 1.2 0.4
3/1/10 1:00 1 France 0.5 0.6
我最终需要的是:
- 每行必须对应一个唯一的组合(类别+小时)
- 每行包含一个Pd.Series列表(每个Pd.series对应一个日期)。因此,列表的长度对应于与(类别+小时)匹配的天数
- 列表的每个元素都是包含其他值的pd.Series对象
输出将类似于以下内容:
Hour+Category Lists
1+France [[1/1/10 1.1 1.2] [2/1/10 1.4 1.0] [3/1/10 0.5 0.6]]
2+France [[1/1/10 2.9 1.4]]
1+UK [[1/1/10 3.8 2.3] [2/1/10 1.1 0.1]
2+UK [[2/1/10 1.2 0.4]]
我的第一次尝试是:
X = X.group_by(['Hour','Category','Date']).first()
这创建了一个多级索引,我想这对于重塑数据可能会有帮助。 然后我可以使用
X.to_panel()
创建一个三维面板,其中主轴和副轴是小时和类别。否则我可以尝试。
X.unstack(level = 2)
要创建一个二维数组,其中列为(小时+类别),列位于(日期+列1,日期+列2)之间,然后删除每行中的NA值,并仅保留剩余值。
但我仍在尝试寻找更好的解决方案。 我也考虑过类似这样的方法,但我无法使其正常工作:
X = X.group_by(['Hour','Category']).apply(lambda x :
[pd.Series(dict( ???)) ]
感谢您的帮助。