向pandas数据帧添加新列将导致NaN

2024-09-30 18:14:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas DataFramedata,其中包含以下事务数据:

           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

我想要一个新的列与计数的访问次数(每天多次访问应视为1)每个消费者。在

所以我试了一下:

^{pr2}$

当我只运行语句而不将其分配给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

预期产出为:

           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

这种方法有什么问题?为什么列noofvisits生成的是NAs而不是count值?在


Tags: 数据dataframepandasdate消费者语句nan次数
1条回答
网友
1楼 · 发布于 2024-09-30 18:14:54

使用^{}生成索引与原始df对齐的Series

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

直接赋值的问题是,您正在group列上'A',因此这成为groupby聚合的索引,然后尝试分配给您的df,但索引不一致,因此NaN列值。在

此外,即使索引值确实一致,形状仍然不同:

^{pr2}$

相关问题 更多 >