我想将父笼的值设置为>
的值
基于id列的分组。
has_highest_owner == 'Yes'
就我而言,我想将所有行的父级笼设置为4TMM7
id has_highest_owner parent_cage
834951691 3TNF2
834951691 4D149
834951691 Yes 4TMM7
答案 0 :(得分:1)
这是最有效,最直接的IMO解决方案:
df['parent_cage'] = df.fillna('').sort_values(['id','has_highest_owner']).groupby('id')['parent_cage'].transform('last')
对于样本df:
id has_highest_owner parent_cage
0 834951691 3TNF2
1 834951691 4D149
2 834951691 Yes 4TMM7
3 987345927 83H85
4 987345927 Yes 9283D
5 987345927 74JSS
收益:
id has_highest_owner parent_cage
0 834951691 4TMM7
1 834951691 4TMM7
2 834951691 Yes 4TMM7
3 987345927 9283D
4 987345927 Yes 9283D
5 987345927 9283D
答案 1 :(得分:0)
这应该做到:
df_filtered = df.loc[df.has_highest_owner=='Yes'][['id','parent_cage']]
df['parent_cage'] = df.merge(df_filtered, on='id').parent_cage_y
df
首先根据您的条件过滤出df,然后根据分组的id合并回原始df!
答案 2 :(得分:0)
设置 (显示多个id
):
df = pd.DataFrame({
'id': [1,1,1,2,2,2],
'highest': ['', '', 'Yes', '', 'Yes', ''],
'parent': [123,345,567, 789,256,15]
})
使用mask
:
df = df.set_index('id')
df.assign(parent=df.mask(df.highest.ne('Yes')).groupby(level=0).parent.ffill().bfill())
highest parent
id
1 567.0
1 567.0
1 Yes 567.0
2 256.0
2 Yes 256.0
2 256.0