數據集為: id col2 col30 1 1 1231 1 1 2342 1 0 3453 2 1 4564 2 0 12435 2 0 3466 3 0 8887 3 0 9998 3 0 777我想按 聚合數據id,并且col3僅當其對應的值為col21時才將 的值附加到列表中。此外,對于id只有 0 的人(不同的)col2,我喜歡聚合值為 0 且為col2空的列表col3。這是當前的代碼:df_test = pd.DataFrame({'id':[1, 1, 1, 2, 2, 2, 3, 3, 3], 'col2':[1, 1, 0, 1, 0, 0, 0, 0, 0], 'col3':[123, 234, 345, 456, 1243, 346, 888, 999, 777]})df_test_agg = pd.pivot_table(df_test, index=['id'], values=['col2', 'col3'], aggfunc={'col2':np.max, 'col3':(lambda x:list(x))})print (df_test_agg) col2 col3id 1 1 [123, 234, 345]2 1 [456, 1243, 346]3 0 [888, 999, 777]所需的輸出應該是(最好在 Pandas 中一步完成): col2 col3id 1 1 [123, 234]2 1 [456]3 0 []////////////////////////////////////////////////// ///////////////////////////////////////編輯 - 嘗試 ColdSpeed 的解決方案df_test = pd.DataFrame({'id':[1, 1, 1, 2, 2, 2, 3, 3, 3], 'col2':[1, 1, 0, 1, 0, 0, 0, 0, 0], 'col3':[123, 234, 345, 456, 1243, 346, 888, 999, 777]})print (df_test)df_test_agg = (df_test.where(df_test.col2 > 0) .assign(id=df_test.id) .groupby('id') .agg({'col2': 'max', 'col3': lambda x: x.dropna().tolist()}))print (df_test_agg) id col2 col30 1 1 1231 1 1 2342 1 0 3453 2 1 4564 2 0 12435 2 0 3466 3 0 8887 3 0 9998 3 0 777 col2 col3id 1 1.0 [123.0, 234.0]2 1.0 [456.0]3 NaN []////////////////////////////////////////////////// ///////////////////////////////////////編輯原始帖子以呈現更多場景。
添加回答
舉報
0/150
提交
取消