Pandas中列名的唯一列组合

时间:2018-02-09 00:21:57

标签: python pandas combinations

我有14,000个数据帧,每个数据帧有30,000行。一个例子df看起来像这样 urban restricted speed_bin True False 0-2.5 True False 0-2.5 True False 0-2.5 True True 0-2.5 True False 2.5-4.5

我需要在所有数据帧上聚合数据,但不能将其全部保存在内存中。我想计算每个数据帧的唯一行组合。对于单个数据帧,我可以做

df.groupby(['urban','restricted','speed_bin']).size().reset_index() \
                                               .rename(columns={0:'count'})

urban   restricted  speed_bin   count
0   False   False   0-2.5       45
1   False   False   2.5-7.5     12
2   False   False   7.5-12.5    16
3   False   False   12.5-17.5   20
4   False   False   17.5-22.5   4

我如何转换此内容并从speed_bin组合中创建列名,同时使计数列成为行内容,并留下urbanspeed_bin列?请记住,数据框可能没有其他数据框可能具有的可能组合的实例。

所以,最后我会有四行对应城市和限制的组合以及相应的速度箱数。

提前致谢!

2 个答案:

答案 0 :(得分:0)

df.set_index(['urban', 'restricted', 'speed_bin'])['count'].unstack()

返回

speed_bin         0-2.5  12.5-17.5  17.5-22.5  2.5-7.5  7.5-12.5
urban restricted                                                
False False          45         20          4       12        16

答案 1 :(得分:0)

一种方法是:

df.pivot_table(index=['urban', 'restricted'], values=['count'], columns=['speed_bin'])

返回:

#                  count                                     
# speed_bin        0-2.5 12.5-17.5 17.5-22.5 2.5-7.5 7.5-12.5
# urban restricted                                           
# False False         45        20         4      12       16