簡體   English   中英

使用Pandas Groupby計算不重復計數不起作用

[英]Counting distinct using pandas groupby not working

我要做的就是遍歷DataFrame並使用pandas group來計數唯一值的數量。 我還對數據框進行了排序,但無濟於事。

我嘗試了15種不同的方法,並且閱讀了所有可以找到的問題/響應線程,但我不知道為什么它不起作用。

創建DF的代碼:

#list of queries is literally a python list of queries in no specified #order

user_queries = pd.DataFrame(list_of_queries)

user_queries = user_queries.rename(index=str, columns={0: "queries"})
# I only added the int 1 because pandas refused to just count the #queries themselves
user_queries["count"] = 1

分組代碼之前的樣子

      queries  count

1234      test         1
1234      test         1  

user_queries["query_counts"] = user_queries.groupby("queries")["count"].nunique()
user_queries.head()

它應該是什么樣子

|    ,queries,count,query_counts|
|1234,test   ,1    ,2           |

但是,它不是“ 2”,而是給我每個值的NaN。 我覺得我缺少一些簡單的東西,但是

最后一列應具有按列“查詢”分組的“計數”列的總和

您要使用轉換方法

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.transform.html

user_queries["query_counts"] = user_queries.groupby("queries")["count"].transform('nunique')

這應該適合您的用例:

import pandas as pd
import numpy as np

queries = [
    (1233, np.nan),
    (1234, 'test'),
    (1235, 'test'),
    (1236, 'foo'),
    (1237, 'bar'),
]

df = pd.DataFrame(queries, columns=['id', 'query'])
print(df.groupby('query')['id'].count())

輸出:

query
bar     1
foo     1
test    2
Name: id, dtype: int64

如果按所有列分組,則將獲得分組的數據幀,從中可以提取每個分組的長度。

grouped = user_queries.groupby(["queries","count"])
res = None
for group_name, df in grouped:
    df['query_counts'] = int(df.shape[0])
    if res==None:
        res = df.iloc[:1]
    else:
        res = pd.concat([res,df.iloc[0:1]])

print(res)

您可以在單個groupby中執行此操作:

In [11]: df.groupby([df.index, "queries", "count"]).size()
Out[11]:
      queries  count
1234  test     1        2
dtype: int64

In [12]: df.groupby([df.index, "queries", "count"]).size().reset_index(name="query_count")
Out[12]:
   level_0 queries  count  query_count
0     1234    test      1            2

要么

In [13]: df.groupby(["queries", "count"]).size()
Out[13]:
queries  count
test     1        2
dtype: int64

In [14]: df.groupby(["queries", "count"]).size().reset_index(name="query_count")
Out[14]:
  queries  count  query_count
0    test      1            2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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