如何基于DataFrame分组的列值一致性生成新列c?
解决方案
不用for循环,用pandas的分组+transform操作就能高效实现需求,步骤如下:
1. 构造原DataFrame
先把你的数据转换成pandas DataFrame:
import pandas as pd df = pd.DataFrame({ 'a': [1,1,1,2,3,3,4,5,5,5,6,6], 'b': ['-', '-', 'R', '-', 'R', 'R', '-', '-', '-', '-', 'R', '-'] })
2. 生成新列c
核心代码一行搞定:
df['c'] = df.groupby('a')['b'].transform(lambda x: 1 if x.nunique() > 1 else 0)
代码解释
groupby('a')['b']:按列a的值分组,取出每组的b列数据transform:将每组的计算结果广播到该组的每一行,保证结果和原DataFrame行数一致x.nunique():统计当前分组内b的唯一值数量,若数量大于1,说明组内b值不一致,返回1;否则返回0
执行后得到的DataFrame就是你期望的结果:
a b c 0 1 - 1 1 1 - 1 2 1 R 1 3 2 - 0 4 3 R 0 5 3 R 0 6 4 - 0 7 5 - 0 8 5 - 0 9 5 - 0 10 6 R 1 11 6 - 1
内容的提问来源于stack exchange,提问作者jjw
相关产品推荐
相关产品推荐

