Python 分组依据和计数唯一天数

Python 分组依据和计数唯一天数,python,python-2.7,pandas,Python,Python 2.7,Pandas,我有一个包含以下列的数据框架: 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.gr

我有一个包含以下列的数据框架:

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)
对于日期,我需要唯一日期的数量,但我得到的是以下信息:


我假设这是因为计算正确,但它保持了
datetime64[ns]
格式。你知道我如何解决这个问题吗?

对我来说,它在pandas
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
或带有
重命名的
nunique

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  

你能查一下“日期”吗:“/nunique”
?对我来说效果很好,你的熊猫版本是什么<代码>打印(pd.show_versions())?它是0.18.0,我不知道是否可以更新它,因为我也在使用GraphLab,我担心它与iTerName不兼容,我没有尝试过。非常感谢:)
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