我有一個關于如何使用 pandas groupby() 函式的問題,但我需要在其上添加一個過濾器,請按照示例 df 操作:
id c1 c2 c3
1 1 2 3
1 2 3 4
1 3 4 5
如果我使用代碼:
grouped_df = df.groupby(['id']).agg(
Min_1=('c1', np.min),
Min_2=('c2', np.min),
Min_3=('c2', np.min))
grouped_df.columns = ['gc1','gc2','gc3']
我會得到以下結果:
id gc1 gc2 gc3
1 1 2 3
但是我想在執行此分組時添加一個過濾器,例如,如果我使用 SQL 來處理此問題,我將撰寫如下代碼:
select id
min(c1) as gc1,
min(c2) as gc2,
min(c3) as gc3
from df_view
where (c1 between 2 and 3)and (c2 between 2 and 3) and (c3 between 2 and 3)
group by id
所以結果如下:
id gc1 gc2 gc3
1 2 2 3
那么如何使用熊貓來完成呢?
我搜索了檔案,但沒有提到我可以在對熊貓進行聚合時添加過濾器。
uj5u.com熱心網友回復:
這不使用任何額外的 pandas 函式,但一種方法是直接將輸入索引到 np.min。這將類似于您的 where 子句。
grouped_df = df.groupby(['id']).agg(
Min_1=('c1', lambda x : np.min(x[(x>=2) & (x<=3)])),
Min_2=('c2', lambda x : np.min(x[(x>=2) & (x<=3)])),
Min_3=('c3', lambda x : np.min(x[(x>=2) & (x<=3)])))
grouped_df.columns = ['gc1','gc2','gc3']
grouped_df
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/527134.html
上一篇:如何在Pandas的CSV中忽略(或轉換)“\N”?
下一篇:按月選擇df行格式為(lambdax:datetime.datetime.strptime(x,'%Y-%m-%dT%H:%M:%S%z'))
