簡體   English   中英

如何根據字典值計算 pandas 列中的唯一值

[英]How to count unique values in pandas column base on dictionary values

我有以下 pandas 數據框。

d = {'id1': ['85643', '85644','85643','8564312','8564314','85645','8564316','85646','8564318','85647','85648','85649','85655','56731','34566','78931','78931'],'ID': ['G-00001', 'G-00001','G-00002','G-00002','G-00002','G-00001','G-00001','G-00001','G-00001','G-00001','G-00002','G-00002','G-00002','G-00002','G-00003','G-00003','G-00003'],'col1': [671, 2,5,3,4,5,60,0,0,6,3,2,4,32,3,1,23],'Goal': [np.nan, 56,78,np.nan,89,73,np.nan ,np.nan ,np.nan, np.nan, np.nan, 34,np.nan, 7, 84,np.nan,5 ], 'col2': [793, 4,8,32,43,55,610,0,0,16,23,72,48,3,28,5,3],'col3': [500, 22,89,33,44,55,60,1,5,6,3,2,4,13,12,14,98],'Date': ['2021-06-13', '2021-06-13','2021-06-14','2021-06-13','2021-06-14','2021-06-15','2021-06-15','2021-06-13','2021-06-16','2021-06-13','2021-06-13','2021-06-13','2021-06-16','2021-05-23','2021-05-13','2021-03-26','2021-05-13']}
dff = pd.DataFrame(data=d)
dff

    id1     ID      col1    Goal        col2    col3    Date
0   85643   G-00001 671     NaN         793     500 2021-06-13
1   85644   G-00001 2       56.0000     4       22  2021-06-13
2   85643   G-00002 5       78.0000     8       89  2021-06-14
3   8564312 G-00002 3       NaN         32      33  2021-06-13
4   8564314 G-00002 4       89.0000     43      44  2021-06-14
5   85645   G-00001 5       73.0000     55      55  2021-06-15
6   8564316 G-00001 60      NaN         610     60  2021-06-15
7   85646   G-00001 0       NaN         0       1   2021-06-13
8   8564318 G-00001 0       NaN         0       5   2021-06-16
9   85647   G-00001 6       NaN         16      6   2021-06-13
10  85648   G-00002 3       NaN         23      3   2021-06-13
11  85649   G-00002 2       34.0000     72      2   2021-06-13
12  85655   G-00002 4       NaN         48      4   2021-06-16
13  56731   G-00002 32      7.0000      3       13  2021-05-23
14  34566   G-00003 3       84.0000     28      12  2021-05-13
15  78931   G-00003 1       NaN         5       14  2021-03-26
16  78931   G-00003 23      5.0000      3       98  2021-05-13

另外,我有下面的字典

dic = {'G-00001':{'aasd':['G-00001','85646','85648','345_2','85655','85659','85647'],
'vaasd':['G-00001','85649','34554','85655','22183','45335','8564316']},
'G-00002':{'aasd2':['G-00002','85343','85649','85655','78931','45121','56731']},
'G-00003':{'gsd3':['G-00003','34566','8564312','45121','78931']}}

我想根據他們的 ID 列根據字典內的列表獲得 id1 的唯一計數。 例如,如果我們考慮 ID - 'G-0002' 只有一個列表 aasd2。 'aasd2':['G-0002','85343','85649','85655','78931','45121','56731']。 我想獲取熊貓數據框中的“G-0002”ID 列中有多少個唯一 id1。 所以它應該適用於 aasd2-3 值('85649'、'85655'、'56731')。 這些是“G-0002”ID 中 aasd2 的 pandas 中僅有的三個 id1 值。

所以我想為 id1s 的列表名稱和計數創建一個如下所示的表

listName    count of id1s
aasd            2
vaasd           1
aasd2           3
gsd3            2

是否可以在 python 中執行此操作? 任何建議將不勝感激。 提前致謝!

根據我之前的回答,我稍微修改了代碼:

data = []
for g, d in dic.items():
    for k, l in d.items():
        data.extend([(g, v, k) for v in l])
df1 = pd.DataFrame(data, columns=['ID', 'id1', 'id2'])

out = dff.merge(df1, on=['ID', 'id1']) \
         .drop_duplicates(['ID', 'id1']) \
         .value_counts('id2')
print(out)

# Output:
id2
aasd2    3
aasd     2
gsd3     2
vaasd    1
dtype: int64

查看字典並創建一個 dataframe 並與dff合並,然后取nunique並創建一個包含結果的字典:

d={}
for k,v in dic.items():
    for k1,v1 in v.items():
        tmp = pd.DataFrame(v1,columns=['id1']).iloc[1:].assign(ID=k)
        d[k1] = tmp.merge(dff[['id1','ID']])['id1'].nunique()

print(d)
{'aasd': 2, 'vaasd': 1, 'aasd2': 3, 'gsd3': 2}

#for output as series
print(pd.Series(d)
aasd     2
vaasd    1
aasd2    3
gsd3     2
dtype: int64

暫無
暫無

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

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