熊猫在每组中找到满足条件的最大值
问题描述:
对不起,如果之前询问过,找不到确切的问题。熊猫在每组中找到满足条件的最大值
我寻找大熊猫的最有效的方法来进行以下操作:
假设我们有如下表:
ID SUB_ID COND
1 101 1 1
2 101 2 1
3 101 3 1
4 102 1 1
5 102 2 0
6 103 1 0
7 103 2 0
8 103 3 0
9 103 4 0
基本上,每个“ID”我们希望得到最大的“SUB_ID”,,因为COND是1。理想情况下,我们希望将该值添加到该ID的每一行作为新列。如果没有该ID的行满足条件,我们想补充(而不是零)0
得到的数据帧将是:只有
ID SUB_ID COND MAX_SUB_ID
1 101 1 1 3
2 101 2 1 3
3 101 3 1 3
4 102 1 1 1
5 102 2 0 1
6 103 1 0 0
7 103 2 0 0
8 103 3 0 0
9 103 4 0 0
我能想出现在最好的办法是选择COND = 1的行,然后在该数据帧上执行groupby以获取最大子ID,然后将其加回到主数据帧。在此之后,我可以将空值更改回0.
df_true = df[df['COND']==1]
max_subid_true=df_true['SUB_ID'].groupby(df_true['ID']).max()
joined_df = df.merge(pd.DataFrame(max_subid_true),how='left',left_on='ID',right_index=True)
joined_df.loc[pd.isnull(joined_df['SUB_ID_y']),'SUB_ID_y']=0
有关这样做的其他想法?
答
df.assign(MAX_SUB_ID=df.SUB_ID.mul(df.COND).groupby(df.ID).transform('max'))
ID SUB_ID COND MAX_SUB_ID
1 101 1 1 3
2 101 2 1 3
3 101 3 1 3
4 102 1 1 1
5 102 2 0 1
6 103 1 0 0
7 103 2 0 0
8 103 3 0 0
9 103 4 0 0
警告
- 假定
SUB_ID
总是正 - 假定
COND
总是1
或0
替代(用更少的警告)
但乐趣却少了
df.assign(MAX_SUB_ID=df.ID.map(df.query('COND == 1').groupby('ID').SUB_ID.max()) \
.fillna(0).astype(int))
很不错的!谢谢 – user4505419