4 回答

TA貢獻1858條經(jīng)驗 獲得超8個贊
嘗試對值agg進行切片。IDTrue
對于更新的示例,您只需在處理之前刪除重復(fù)項即可。其余的都一樣
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

TA貢獻1951條經(jīng)驗 獲得超3個贊
與 anky 大致相同,但隨后使用Series.whereandnamed aggregations因此我們可以在 groupby 中創(chuàng)建列時重命名列。
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

TA貢獻1829條經(jīng)驗 獲得超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

TA貢獻1802條經(jīng)驗 獲得超5個贊
IIUC,你可以嘗試series.isin一下groupby.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
添加回答
舉報