2017-07-07 48 views
1

我有一個熊貓數據框有以下的列計數:GROUP BY和獨特的天

COLS=['DATA','DSC_MATERIAL','DSC_FORNECEDOR','MTR_QUANTIDADE','MTR_VALOR','PRECO'] 
df2=df[COLS] 

我試圖做一個GROUPBY來分析這些數據,我使用此代碼:

f={'MTR_VALOR':['sum'],'MTR_QUANTIDADE':['sum'],'preco':['mean'], 'DATE': lambda x: x.nunique()} 
df_milho.groupby(['DSC_MATERIAL','DSC_FORNECEDOR']).agg(f) 

對於我想唯一的日期數的日期,但什麼我得到如下:

Sample result

我假設這是因爲計算正確完成,但它保持datetime64[ns]格式。任何想法如何我可以解決這個問題?

+0

你可以檢查' '日期':「nunique''? – jezrael

+0

對我來說它很好,你的熊貓版本是什麼? 'print(pd.show_versions())'? – jezrael

+0

它是0.18.0我不知道我是否可以更新它,因爲我也使用GraphLab,我害怕它不會兼容 – Rasmnev

回答

1

對我來說它在熊貓工作很好0.20.2

np.random.seed(45) 
rng = pd.date_range('2017-04-03', periods=10) 
df_milho = pd.DataFrame({'DATE': rng, 
         'preco': np.random.randint(10, size=10), 
         'MTR_VALOR': np.random.randint(10, size=10), 
         'MTR_QUANTIDADE': np.random.randint(10, size=10), 
         'DSC_FORNECEDOR':list('aaeeeeeddd'), 
         'DSC_MATERIAL':list('aaaabbbddd')}) 
print (df_milho) 
     DATE DSC_FORNECEDOR DSC_MATERIAL MTR_QUANTIDADE MTR_VALOR preco 
0 2017-04-03    a   a    8   6  3 
1 2017-04-04    a   a    4   8  0 
2 2017-04-05    e   a    6   7  5 
3 2017-04-06    e   a    4   8  3 
4 2017-04-07    e   b    9   5  4 
5 2017-04-08    e   b    1   2  9 
6 2017-04-09    e   b    6   8  8 
7 2017-04-10    d   d    8   1  1 
8 2017-04-11    d   d    8   6  5 
9 2017-04-12    d   d    1   4  9 

f={'MTR_VALOR':'sum','MTR_QUANTIDADE':['sum'],'preco':['mean'],'DATE': lambda x: x.nunique()} 
df1 = df_milho.groupby(['DSC_MATERIAL','DSC_FORNECEDOR']).agg(f) 
print (df1) 
           DATE preco MTR_QUANTIDADE MTR_VALOR 
          <lambda> mean   sum  sum 
DSC_MATERIAL DSC_FORNECEDOR           
a   a      2 1.5    12  14 
      e      2 4.0    10  15 
b   e      3 7.0    16  15 
d   d      3 5.0    17  11 

但似乎可以與pd.Series.nunique另一種解決方案:

或者nuniquerename

f={'MTR_VALOR':'sum','MTR_QUANTIDADE':'sum','preco':'mean', 'DATE': 'nunique'} 
d = {'DATE':'uniquedates','preco':'precomean', 
    'MTR_QUANTIDADE':'MTR_QUANTIDADEsum','MTR_VALOR':'MTR_VALORsum'} 
df1 = df_milho.groupby(['DSC_MATERIAL','DSC_FORNECEDOR']).agg(f).rename(columns=d) 
print (df1) 
          uniquedates precomean MTR_QUANTIDADEsum \ 
DSC_MATERIAL DSC_FORNECEDOR            
a   a       2  1.5     12 
      e       2  4.0     10 
b   e       3  7.0     16 
d   d       3  5.0     17 

          MTR_VALORsum 
DSC_MATERIAL DSC_FORNECEDOR     
a   a       14 
      e       15 
b   e       15 
d   d       11 
+0

重命名確實有效,我沒有嘗試過。非常感謝多:) – Rasmnev