基于Pandas中ID重复值与Collection列表长度设置status列
解决方案
步骤说明
- 先计算
Collection列中每个列表的长度,用apply(len)比str.len()更可靠——str.len()是针对字符串的,而这里是列表类型,直接调用列表的len方法更准确。 - 按
ID分组,获取每个分组内列表长度的最大值。 - 对比每行的列表长度是否等于对应分组的最大值:相等则
status设为1,否则设为0。这种逻辑天然满足需求:无重复的ID分组只有一行,必然等于最大值,所以status为1;重复ID中只有长度最大的行status为1。
完整代码
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'Collection': [[{'tom': 'one'}, {'tom': 'two'}], [{'nick': 'one'}], [{'julie': 'one'}]], 'ID': [10, 10, 14] }) # 计算Collection列的列表长度 df['col_len'] = df['Collection'].apply(len) # 按ID分组,获取每个组的最大长度 max_len_per_id = df.groupby('ID')['col_len'].transform('max') # 设置status列 df['status'] = (df['col_len'] == max_len_per_id).astype(int) # 可选:删除临时的col_len列 df.drop('col_len', axis=1, inplace=True) print(df)
运行结果
Collection ID status 0 [{'tom': 'one'}, {'tom': 'two'}] 10 1 1 [{'nick': 'one'}] 10 0 2 [{'julie': 'one'}] 14 1
内容的提问来源于stack exchange,提问作者Strayhorn
相关产品推荐
相关产品推荐

