繁体   English   中英

Pandas DataFrame:根据不同行的值创建一列

[英]Pandas DataFrame : Create a column based on values from different rows

我有一个看起来像这样的熊猫数据框:

    Ref       Value
1   SKU1       A
2   SKU2       A           
3   SKU3       B
4   SKU2       A
5   SKU1       B
6   SKU3       C           

我想创建一个新列,以给定 Ref 的值是否匹配为条件。 例如,如果 SKU1 的两行具有相同的值,则显示“好”,如果不显示“坏”数据框通常每个 Ref 有 2 行,但有时会有更多(在这种情况下,“好”是它们都相互匹配)

对于上面的示例,这将是:

    Ref       Value    NewCol
1   SKU1       A        bad
2   SKU2       A        good   
3   SKU3       B        bad
4   SKU2       A        good  
5   SKU1       B        bad
6   SKU3       C        bad        

实现这一点的最佳方法是什么? 在我的示例中, Value只能是 A、B 或 C,但Ref有数千个不同的条目,这就是我挣扎的原因

提前谢谢了 !

让我们尝试groupby().nunique()来检查 ref 中值的数量:

df['NewCol'] = np.where(df.groupby('Ref')['Value'].transform('nunique')==1, 
                        'good', 'bad')

输出:

    Ref Value NewCol
1  SKU1     A    bad
2  SKU2     A   good
3  SKU3     B    bad
4  SKU2     A   good
5  SKU1     B    bad
6  SKU3     C    bad

更新:每条评论:

s = df['Ref'].map(df.groupby('Ref')['Value'].apply(set))

df['NewCol'] = np.select((s.str.len()==1, s.eq({'A','B'})),
                         ('good', 'average'), 'bad')

输出:

    Ref Value   NewCol
1  SKU1     A  average
2  SKU2     A     good
3  SKU3     B      bad
4  SKU2     A     good
5  SKU1     B  average
6  SKU3     C      bad

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM