[英]Adding new column to pandas DataFrame results in NaN
我有一個熊貓數據幀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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.