tus*_*haR 5 python pandas-groupby
我有一个data包含以下交易数据的Pandas DataFrame :
A date
0 M000833 2016-08-01
1 M000833 2016-08-01
2 M000833 2016-08-02
3 M000833 2016-08-02
4 M000511 2016-08-05
Run Code Online (Sandbox Code Playgroud)
我想要一个新列,其中包含每个消费者的访问次数(每天多次访问应视为 1)。
所以我试过这个:
import pandas as pd
data['noofvisits'] = data.groupby(['A'])['date'].nunique()
Run Code Online (Sandbox Code Playgroud)
当我只运行该语句而不将其分配给 DataFrame 时,我会得到一个具有所需输出的 Pandas 系列。但是,上述语句导致:
A date noofvisits
0 M000833 2016-08-01 NaN
1 M000833 2016-08-01 NaN
2 M000833 2016-08-02 NaN
3 M000833 2016-08-02 NaN
4 M000511 2016-08-05 NaN
Run Code Online (Sandbox Code Playgroud)
预期的输出是:
A date noofvisits
0 M000833 2016-08-01 2
1 M000833 2016-08-01 2
2 M000833 2016-08-02 2
3 M000833 2016-08-02 2
4 M000511 2016-08-05 1
Run Code Online (Sandbox Code Playgroud)
这种方法有什么问题?为什么 noofvisits 列的结果是 NAs 而不是计数值?
使用transform生成一个Series与它的指数对准原来的DF:
In[32]:
df['noofvisits'] = df.groupby(['A'])['date'].transform('nunique')
df
Out[32]:
A date noofvisits
index
0 M000833 2016-08-01 2
1 M000833 2016-08-01 2
2 M000833 2016-08-02 2
3 M000833 2016-08-02 2
4 M000511 2016-08-05 1
Run Code Online (Sandbox Code Playgroud)
直接分配的问题是您group在列上,'A'因此这成为groupby聚合的索引,然后您尝试分配给您的 df 但索引不一致,因此NaN列值。
此外,即使索引值确实同意,形状也不同:
In[33]:
df.groupby(['A'])['date'].nunique()
Out[33]:
A
M000511 1
M000833 2
Name: date, dtype: int64
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2625 次 |
| 最近记录: |