【发布时间】:2021-09-18 06:54:24
【问题描述】:
我有一个带有 4 列的 pandas 数据框 - A、B、C、D 和 E。我想按 A 列创建组,然后找到 B 和 C 列的最大值,然后用 D 中存在的相应值填充 E如下例所示。这里的条件是,如果 B 列中的一个组全为 1,则 E 列将被填充为 0。
我的预期输出
column A column B column C column D Column E
AA 1 a 12 15
AA 2 d 13 15
AA 3 b 14 15
AA 3 e 15 15
BB 1 c 15 17
BB 1 d 16 17
BB 2 b 17 17
BB 2 a 18 17
CC 1 a 11 0
CC 1 c 10 0
CC 1 b 11 0
CC 1 e 15 0
我的代码:
df1 = df1.sort_values(by=['column A', 'column B','column C','column D'],ascending=[True,False, False,False])
col_e_df = df1.groupby(['column A']).agg({'column D':['first']})
col_e__df = tranform_aggregated_data(col_e_df, {'first': 'column D'})
#print(col_e_df.sort_index())
df1 = df1.merge(col_e__df, on = ['column A'])
当数字大于 2 时,此代码可以正常工作,但是当 B 列的任何组全为 1 时,它不会填充 0(这是我需要做的)。当我添加 if 条件时,数字大于 2 的组也显示 0。
出错的代码行
col_e_df = (np.where(df1['column B'] >= 2, df1.groupby(['column A'])['columnD'].transform('first') , 0))
The actual output from my code is
column A column B column C column D Column E
AA 1 a 12 0
AA 2 d 13 15
AA 3 b 14 15
AA 3 e 15 15
BB 1 c 15 0
BB 1 d 16 0
BB 2 b 17 17
BB 2 a 18 17
CC 1 a 11 0
CC 1 c 10 0
CC 1 b 11 0
CC 1 e 15 0
【问题讨论】: