亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

根據嵌套列表python中的類別計算用戶數

根據嵌套列表python中的類別計算用戶數

千巷貓影 2022-06-22 15:48:40
我有一個包含兩個子列表的列表。這里看起來像這樣a = [['user1', 'referral'], ['user2', 'referral'], ['user1', 'referral'], ['user1', 'affiliate'], ['user7', 'affiliate'], ['user1', 'affiliate'], ['user9', 'affiliate'], ['user4', 'cpc'], ['user4', 'referral'], ['user2', 'referral'], ['user7', 'affiliate'], ['user14', 'cpc'], ['user3', 'orgainic'], ['user2', 'orgainic'], ['user4', 'cpc'], ['user2', 'cpc'], ['user8', 'cpc'], ['user2', 'orgainic']]我想根據類別計算用戶(唯一)。必需的:required = [['referral',3],['affiliate',3],['cpc',4],['orgainic',2]]我得到的輸出:{'referral': 3, 'affiliate': 2, 'cpc': 4, 'orgainic': 3}算錯了。這是我嘗試過的代碼:a = [['user1', 'referral'], ['user2', 'referral'], ['user1', 'referral'], ['user1', 'affiliate'], ['user7', 'affiliate'], ['user1', 'affiliate'], ['user9', 'affiliate'], ['user4', 'cpc'], ['user4', 'referral'], ['user2', 'referral'], ['user7', 'affiliate'], ['user14', 'cpc'], ['user3', 'orgainic'], ['user2', 'orgainic'], ['user4', 'cpc'], ['user2', 'cpc'], ['user8', 'cpc'], ['user2', 'orgainic']]required = [['referral',3],['affiliate',3],['cpc',4],['orgainic',2]]c = {}visits = []for i in a:    # print(i)    for j in i[1:]:        if j not in c and i[0] not in visits:            c[j] = 1            visits.append(i[0])        elif j in c and i[0] not in visits:            c[j] = c[j]+1print(c)幫我解決一些問題...
查看完整描述

4 回答

?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

這是一種使用collections.defaultdict.


前任:


from collections import defaultdict


a = [['user1', 'referral'], ['user2', 'referral'], ['user1', 'referral'], ['user1', 'affiliate'], ['user7', 'affiliate'], ['user1', 'affiliate'], ['user9', 'affiliate'], ['user4', 'cpc'], ['user4', 'referral'], ['user2', 'referral'], ['user7', 'affiliate'], ['user14', 'cpc'], ['user3', 'orgainic'], ['user2', 'orgainic'], ['user4', 'cpc'], ['user2', 'cpc'], ['user8', 'cpc'], ['user2', 'orgainic']]

result = defaultdict(int)

seen = set()

for k, v in a:

    key = "{}_{}".format(k, v)

    if key not in seen:

        result[v] += 1

        seen.add(key)

print(list(map(list, result.items())))

輸出:


[['referral', 3], ['affiliate', 3], ['cpc', 4], ['orgainic', 2]]


查看完整回答
反對 回復 2022-06-22
?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

首先讓我們使條目獨一無二:


c = {tuple(sublist) for sublist in a}

現在我們有了一對獨特的用戶和類型。


對于我們不需要用戶的計數,因此讓我們將其設為僅包含第二個參數的列表:


c = [elem[1] for elem in c]

現在我們可以很容易地計算它:


from collections import Counter

c = Counter(c)

結果:Counter({'cpc': 4, 'affiliate': 3, 'referral': 3, 'orgainic': 2})


現在把它們放在一起:


from collections import Counter


c = Counter(elem[1] for elem in {tuple(sublist) for sublist in a})


查看完整回答
反對 回復 2022-06-22
?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

defaultdict和基于循環的解決方案

這可以使用defaultdict:


d = defaultdict(set)

for user, category in a:

    d[category].add(user)

res = [[category, len(users)] for category, users in d.items()]

輸出:


# [['affiliate', 3], ['cpc', 4], ['orgainic', 2], ['referral', 3]]

groupby基于解決方案

或者,這可以使用groupbyfrom來完成itertools:


from itertools import groupby

from operator import itemgetter


a = [['user1', 'referral'], ['user2', 'referral'], ['user1', 'referral'], ...]


# Sort the items according to the category so groupby will collect the pairs accordingly

res = {category: len({user for user, _ in pairs}) for category, pairs in

       groupby(sorted(a, key=itemgetter(1)), key=itemgetter(1))}


res = [list(pair) for pair in res.items()]

輸出:


# [['affiliate', 3], ['cpc', 4], ['orgainic', 2], ['referral', 3]]


查看完整回答
反對 回復 2022-06-22
?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

這聽起來像是熊貓的案例,您的列表已經是正確的形狀:


import pandas as pd

a = [['user1', 'referral'], ['user2', 'referral'], ['user1', 'referral'], ['user1', 'affiliate'], ['user7', 'affiliate'], ['user1', 'affiliate'], ['user9', 'affiliate'], ['user4', 'cpc'], ['user4', 'referral'], ['user2', 'referral'], ['user7', 'affiliate'], ['user14', 'cpc'], ['user3', 'orgainic'], ['user2', 'orgainic'], ['user4', 'cpc'], ['user2', 'cpc'], ['user8', 'cpc'], ['user2', 'orgainic']]


df = pd.DataFrame(a)

df.columns=["user", "type"]


unique_per_type = df.groupby("type")["user"].unique()

現在 unique_per_type 是:


type

affiliate            [user1, user7, user9]

cpc          [user4, user14, user2, user8]

orgainic                    [user3, user2]

referral             [user1, user2, user4]

Name: user, dtype: object

您可以執行以下操作:


# access length by key

len(unique_per_type["affiliate"]) 


# or use it like a dict

for key, val in unique_per_type.items():

    print(key, len(val)))

這個解決方案添加了 pandas,這是一個巨大的依賴。但是,一旦您將數據放入 DataFrame 中,您就可以用它做很多事情:


df["user"].unique() # shows all unique users


df.query("user=='user1'") # shows all observations involving user1


查看完整回答
反對 回復 2022-06-22
  • 4 回答
  • 0 關注
  • 201 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號