在groupby[重复]中两个函数之间的区别

问题描述 投票:0回答:1

我在学习一些功能,遇到这些。

df.groupby("date").agg("user_id": pd.Series.nunique)

df.groupby("date")["user_id"].transform('count')

我想了解和学习一下以上两种说法的区别。

谢谢

python pandas dataframe group-by aggregate
1个回答
2
投票

检查。

df = pd.DataFrame({
        'date':['2019-01-01', '2019-01-01', '2019-01-01', 
                '2019-01-02', '2019-01-02', '2019-01-02'],
         'user_id':[np.nan,4,4,5,5,4],

})

print (df)
         date  user_id
0  2019-01-01      NaN
1  2019-01-01      4.0
2  2019-01-01      4.0
3  2019-01-02      5.0
4  2019-01-02      5.0
5  2019-01-02      4.0

首先不同的是这里使用的是聚合,通过一些聚合函数来减少行。这里使用的是 Series.nunique 对于唯一值的计数,缺失的valeus被省略,所以对于第一组得到 1第二次 2:

print (df.groupby("date").agg({"user_id": pd.Series.nunique}))
            user_id
date               
2019-01-01      1.0
2019-01-02      2.0

如果使用 DataFrameGroupBy.nunique 也是counting错过了像unique value这样的值。

print (df.groupby("date")["user_id"].nunique())
date
2019-01-01    2
2019-01-02    2
Name: user_id, dtype: int64

看起来像个bug,因为。

print (df.groupby("date")["user_id"].nunique(dropna=True))
date
2019-01-01    2
2019-01-02    2
Name: user_id, dtype: int64

print (df.groupby("date")["user_id"].nunique(dropna=False))
date
2019-01-01    2
2019-01-02    2
Name: user_id, dtype: int64

如果使用 GroupBy.transform 然后应用聚合函数,但行并没有减少,但同一组的相同值是重复的,所以得到新的 Series 与原来的长度相同。

另外 GroupBy.count id用于统计排除缺失值的数值,所以第一组的数值得到 2 其次,因为没有缺失值。3:

print (df.groupby("date")["user_id"].transform('count'))
0    2
1    2
2    2
3    3
4    3
5    3
Name: user_id, dtype: int64
© www.soinside.com 2019 - 2024. All rights reserved.