簡體   English   中英

向pandas DataFrame添加新列會導致NaN

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM