如何检查 Pandas 数据框中一列的所有值是否相等?

3

我有一个像这样的数据框

  name data result 
0  x    100
1  x    100
2  x    100
3  x    100
4  x    100
5  y    100
6  y    90
7  y    90
8  y    100
9  y    85

我希望检查“名称”列中的每个组是否在“数据”列中具有相同的值。因此,对于每个“x”组,如果相应的“数据”值都相等,则在“结果”列中写入“full”。如果一组的值不全相等,则在“结果”列中写入“nearly”。我已尝试对数据框进行分组:
dfx = df.groupby('name')
dfx = dfa.get_group('x')

但它并不能真正帮助检查每个值是否相同,需要在 result 列中编写。

我已经尝试创建了一个函数来检查唯一的值。

def check_identicals(row):
    if(df.sent.nunique() == 1):
        print('Full')

这里的想法是将该函数应用于每一行,并将输出写入“result”列。

理想的输出:

   name data result 
0  x    100   full
1  x    100   full
2  x    100   full
3  x    100   full
4  x    100   full
5  y    100   nearly
6  y    90    nearly
7  y    90    nearly
8  y    100   nearly
9  y    85    nearly

1个回答

3

使用numpy.whereGroupBy.transform以及DataFrameGroupBy.nunique来比较新Series中与原始DataFrame相同大小的所有值:

df['result'] = np.where(df.groupby('name')['data'].transform('nunique') == 1,'full','nearly')
print (df)
  name  data  result
0    x   100    full
1    x   100    full
2    x   100    full
3    x   100    full
4    x   100    full
5    y   100  nearly
6    y    90  nearly
7    y    90  nearly
8    y   100  nearly
9    y    85  nearly

编辑:

要测试每个组中是否存在所有缺失值,可以使用numpy.select并添加另一个条件,将缺失值与transformGroupBy.all进行比较:

m1 = df.groupby('name')['data'].transform('nunique') == 1
m2 = df['data'].isna().groupby(df['name']).transform('all')

df['result'] = np.select([m1, m2], ['full', 'all_missing'],'nearly')
print (df)
  name   data       result
0    x  100.0         full
1    x  100.0         full
2    x  100.0         full
3    x  100.0         full
4    x  100.0         full
5    y  100.0       nearly
6    y   90.0       nearly
7    y   90.0       nearly
8    z    NaN  all_missing
9    z    NaN  all_missing

有没有一种方法可以包含isnull()条件?比如说,如果每个不同组的数据值都为Null,在结果列中指示出来? - Mazz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接