我遇到了很多麻烦,因为有一个具体的问题,就是如何将数据重组成正确的格式。
我有这样的数据:
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
我最终需要的是:
(因此,它与3D数组或面板相关,但列表中的元素数量可能会改变)
输出如下所示:
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()
它创建了一个3D面板,但是其中的长轴和短轴是小时和类别。否则我可以试试
X.unstack(level = 2)
要有一个二维数组,列为(Hour+Category),列之间为(Day+Col1,Day+Col2),然后删除每行中的NA值,并只保留其余的值。
但我仍在努力寻找更好的解决办法。我也想过这样的事情,但我做不到:
X = X.group_by(['Hour','Category']).apply(lambda x :
[pd.Series(dict( ???)) ]
谢谢你的帮助。
发布于 2016-02-19 18:57:32
下面的内容看起来很有效(您需要做一些列重命名,等等),但是您想要实现的目标对我来说似乎很奇怪--将数据作为一个列表/数组放入一个系列中会使以后更难使用。
print df.groupby(['Hour', 'Category']).apply(lambda subdf : subdf[['Date','Col1','Col2']].values).reset_index()
Hour Category 0
0 1 France [[1/1/10, 1.1, 1.2], [2/1/10, 1.4, 1.0], [3/1/...
1 1 UK [[1/1/10, 3.8, 2.3], [2/1/10, 1.1, 0.1]]
2 2 France [[1/1/10, 2.9, 1.4]]
3 2 UK [[2/1/10, 1.2, 0.4]]
https://stackoverflow.com/questions/35507412
复制相似问题