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]
格式。你知道我如何解决这个问题吗?对我来说,它在pandas0.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