如何在pandas中计算每个唯一值的出现次数

5

我有一个大型的pandas数据框,我想计算其中每个唯一值的出现次数,我尝试了以下方法,但它花费了太多时间和内存。有什么更符合Python规范的方法吗?

pack=[]
for index,row in packets.iterrows ():
    pack.extend(pd.Series(row).dropna().values.tolist())

unique, count= np.unique(pack, return_counts=True)
counts= np.asarray((unique, count))

2
packets.value_counts() 怎么样? - cs95
另外,你为什么要创建pack列表却不对它进行任何操作? - cs95
哦,我以为这是一个系列。你想要找到每一列中每个单独值的计数吗?只需执行 u,c = np.unique(packets.values.ravel(), return_counts=True) - cs95
结果是(array([ 58., 59., 62., ..., nan, nan, nan]), array([120, 3, 5, ..., 1, 1, 1], dtype=int64)),这不是整个数据框中每个唯一值的计数。 - user3806649
1
pd.Series(packets.values.ravel()).dropna().value_counts() 是什么意思? - cs95
显示剩余2条评论
1个回答

6

看起来你想要在所有列中计算值的数量。你可以将其展平为一个序列,删除NaN,并调用value_counts。这是一个示例 -

df

     a    b
0  1.0  NaN
1  1.0  NaN
2  3.0  3.0
3  NaN  4.0
4  5.0  NaN
5  NaN  4.0
6  NaN  5.0

pd.Series(df.values.ravel()).dropna().value_counts()

5.0    2
4.0    2
3.0    2
1.0    2
dtype: int64

另一种方法是使用np.unique -
u, c = np.unique(pd.Series(df.values.ravel()).dropna().values, return_counts=True)
pd.Series(c, index=u)

1.0    2
3.0    2
4.0    2
5.0    2
dtype: int64

请注意,第一种方法按计数的降序排序结果,而后者则不会。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接