向 pandas DataFrame 添加新列导致 NaN
Adding new column to pandas DataFrame results in NaN
我有一个 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
直接分配的问题是你在 group
列 'A'
上所以这成为 groupby
聚合的索引,然后你尝试分配给你的 df但索引不一致,因此 NaN
列值。
此外,即使索引值确实一致,形状仍然不同:
In[33]:
df.groupby(['A'])['date'].nunique()
Out[33]:
A
M000511 1
M000833 2
Name: date, dtype: int64
我有一个 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
直接分配的问题是你在 group
列 'A'
上所以这成为 groupby
聚合的索引,然后你尝试分配给你的 df但索引不一致,因此 NaN
列值。
此外,即使索引值确实一致,形状仍然不同:
In[33]:
df.groupby(['A'])['date'].nunique()
Out[33]:
A
M000511 1
M000833 2
Name: date, dtype: int64