gpt4 book ai didi

python - 将新列添加到 pandas DataFrame 导致 NaN

转载 作者:太空宇宙 更新时间:2023-11-03 10:54:13 25 4
gpt4 key购买 nike

我有一个带有以下交易数据的 pandas DataFrame data:

           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 次)。

所以我尝试了这个:

import pandas as pd
data['noofvisits'] = data.groupby(['A'])['date'].nunique()

当我只是运行语句而不将其分配给 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 列的结果是 NA 而不是计数值?

最佳答案

使用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

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

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

In[33]:
df.groupby(['A'])['date'].nunique()

Out[33]:
A
M000511 1
M000833 2
Name: date, dtype: int64

关于python - 将新列添加到 pandas DataFrame 导致 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44517350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com