根据相等行的数量更改列的值

2024-10-03 15:26:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个数据帧:

df = pd.DataFrame({'id': ['B668441DE83B', 'B668441DE83B', 'B668441DE83B', '89C26DEE41E2', '89C26DEE41E2'],
                   'desc': ['Car', 'Car', 'Bus', 'Bus', 'Bus'],
                   'quantity': [2, 2, 1, 3, 3]})
print(df, '\n')
             id desc  quantity
0  B668441DE83B  Car         2
1  B668441DE83B  Car         2
2  B668441DE83B  Bus         1
3  89C26DEE41E2  Bus         3
4  89C26DEE41E2  Bus         3 

如果行的quantity值等于实际行数,则需要将quantity列的值更改为1,其中id列和desc列相等(本例中为row0和row1)

期望输出:

             id desc  quantity
0  B668441DE83B  Car         1
1  B668441DE83B  Car         1
2  B668441DE83B  Bus         1
3  89C26DEE41E2  Bus         3
4  89C26DEE41E2  Bus         3 

Tags: 数据iddataframedfcardescquantitypd
1条回答
网友
1楼 · 发布于 2024-10-03 15:26:11

使用^{}表示每组的计数值,通过^{}表示==表示原始设置1表示掩码:

mask = df.groupby(['id','desc'])['id'].transform('size').eq(df['quantity'])

df.loc[mask, 'quantity'] = 1

或:

df['quantity'] = df['quantity'].mask(mask, 1)

print (df)
             id desc  quantity
0  B668441DE83B  Car         1
1  B668441DE83B  Car         1
2  B668441DE83B  Bus         1
3  89C26DEE41E2  Bus         3
4  89C26DEE41E2  Bus         3

相关问题 更多 >