如果组nunique大于N,如何更改列的值?

问题描述 投票:0回答:1

我的数据框:

import pandas as pd
df = pd.DataFrame(
    {
        'a': ['a', 'a', 'a', 'b', 'c', 'x', 'j', 'w'],
        'b': [1, 1, 1, 2, 2, 3, 3, 3],

    }
)

预期输出正在更改列

a

     a  b  
0    a  1  
1    a  1  
2    a  1  
3  NaN  2  
4  NaN  2  
5  NaN  3  
6  NaN  3  
7  NaN  3  

逻辑:

这些组基于

b
。如果是团体
df.a.nunique() > 1
那么
df.a == np.nan

这是我的尝试。它有效,但我想知道是否有一个单行代码可以做到这一点:

df['x'] = df.groupby('b')['a'].transform('nunique')
df.loc[df.x > 1, 'a'] = np.nan
python pandas dataframe
1个回答
0
投票

一个可能的解决方案:

g = df.groupby('b')

pd.concat(
    [y if all(y['a'].iloc[0] == y['a'])
     else y.assign(a = np.nan)
     for x, y in g])

输出:

     a  b
0    a  1
1    a  1
2    a  1
3  NaN  2
4  NaN  2
5  NaN  3
6  NaN  3
7  NaN  3
© www.soinside.com 2019 - 2024. All rights reserved.