2017-05-17 284 views
0

我有一个多指标大熊猫数据帧像这样聚集在大熊猫据帧计数

# df = 
         val 
date  id   
2021-01-01 whatever1 0 
      whatever2 1 
      whatever3 0 
      whatever4 3 
      whatever5 2 
2021-01-02 whatever2 0 
      whatever7 3 
2021-01-03 whatever3 0 
      whatever4 0 
... 

,我想算不同值的出现次数的第一指标下,像这样,

  0 1 2 3 

2021-01-01 2 1 1 1 
2021-01-02 1 0 0 1 
2021-01-03 2 0 0 0 
... 

我该怎么做?我最好的尝试是这样的:

df.groupby(by='date', level=0).agg([lambda x: [np.count_nonzero(x==i) for i in range(df.values.max())]]) 

# result = 
        val 
       <lambda> 
data      
2021-01-01 [2, 1, 1, 1] 
2021-01-02 [1, 0, 0, 1] 
2021-01-03 [2, 0, 0, 0] 

回答

2

我认为最简单的方法是使用一个交叉表:

pd.crosstab(df.index.get_level_values('date'), df['val']) 
Out: 
val   0 1 2 3 
row_0     
2021-01-01 2 1 1 1 
2021-01-02 1 0 0 1 
2021-01-03 2 0 0 0 
+0

谢谢你,我一直在学习新的功能。 – Bella