我有一个Pandas DataFrame,其中包含以下列:
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)
对于DATE,我想要唯一日期的数量,但我得到的是以下内容:
我假设这是因为计算正确,但保持datetime64[ns]
格式。知道如何解决这个问题吗?
答案 0 :(得分:1)
对我而言,它在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
但似乎可以有pd.Series.nunique
的其他解决方案:
f={'MTR_VALOR':'sum','MTR_QUANTIDADE':['sum'],
'preco':['mean'], 'DATE': lambda x: pd.Series.nunique(x)}
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
与rename
:
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