簡體   English   中英

使用 Pandas 中的條件計算多列中每個組的唯一值

[英]Count unique values for each group in multi column with criteria in Pandas

更新了樣本數據集

我有以下數據:

location ID  Value
A        1   1 
A        1   1
A        1   1 
A        1   1
A        1   2 
A        1   2
A        1   2 
A        1   2
A        1   3 
A        1   4 
A        2   1 
A        2   2 
A        3   1 
A        3   2
B        4   1 
B        4   2 
B        5   1
B        5   1 
B        5   2
B        5   2 
B        6   1 
B        6   1
B        6   1
B        6   1 
B        6   1
B        6   2
B        6   2
B        6   2   
B        7   1 

我想為以下輸出的每個位置和每個 ID 計算唯一值(僅當值等於 1 或 2 時)。

location ID_Count  Value_Count
A        3         6
B        4         7

我嘗試使用df.groupby(['location'])['ID','value'].nunique() ,但我只得到值的唯一計數,就像我得到 A 的 value_count 為 4 和 for B 為 2。

嘗試在True值的ID上使用切片進行agg

對於更新后的樣本,您只需要在處理前刪除重復項。 其余都是一樣的

df = df.drop_duplicates(['location', 'ID', 'Value'])

df_agg = (df.Value.isin([1,2]).groupby(df.location)
                              .agg(ID_count=lambda x: df.loc[x[x].index, 'ID'].nunique(), 
                                   Value_count='sum'))

Out[93]:
          ID_count  Value_count
location
A                3            6
B                4            7

IIUC,您可以嘗試series.isingroupby.agg

out = (df.assign(Value_Count=df['Value'].isin([1,2])).groupby("location",as_index=False)
                                   .agg({"ID":'nunique',"Value_Count":'sum'}))

print(out)

  location  ID  Value_Count
0        A   3          6.0
1        B   4          7.0

與 anky 大致相同,但隨后使用Series.wherenamed aggregations因此我們可以在 groupby 中創建列時重命名列。

grp = df.assign(Value=df['Value'].where(df['Value'].isin([1, 2]))).groupby('location')
grp.agg(
    ID_count=('ID', 'nunique'),
    Value_count=('Value', 'count')
).reset_index()
  location  ID_count  Value_count
0        A         3            6
1        B         4            7

讓我們嘗試一種與其他答案非常相似的方法。 這次我們先過濾:

(df[df['Value'].isin([1,2])]
   .groupby(['location'],as_index=False)
   .agg({'ID':'nunique', 'Value':'size'})
)

輸出:

  location  ID  Value
0        A   3      6
1        B   4      7

暫無
暫無

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

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