Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫-至少有两种不同代码的饲养群_Python_Pandas_Dataframe - Fatal编程技术网

Python 熊猫-至少有两种不同代码的饲养群

Python 熊猫-至少有两种不同代码的饲养群,python,pandas,dataframe,Python,Pandas,Dataframe,我正在使用具有以下结构的数据帧: import pandas as pd df = pd.DataFrame({'group' : [1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4], 'brand' : ['A', 'B', 'X', 'A', 'B', 'C', 'X', 'B', 'C', 'X', 'A', 'B'], 'code' : [2185, 2185, 0, 1410, 13

我正在使用具有以下结构的数据帧:

import pandas as pd

df = pd.DataFrame({'group' : [1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4], 
                   'brand' : ['A', 'B', 'X', 'A', 'B', 'C', 'X', 'B', 'C', 'X', 'A', 'B'], 
                   'code' : [2185, 2185, 0, 1410, 1390, 1390, 0, 3670, 4870, 0, 2000, 0]})

print(df)

    group brand  code
0       1     A  2185
1       1     B  2185
2       1     X     0
3       2     A  1410
4       2     B  1390
5       2     C  1390
6       2     X     0
7       3     B  3670
8       3     C  4870
9       3     X     0
10      4     A  2000
11      4     B     0
我的目标是只查看具有至少两个不同代码的组。过滤标准中不应考虑标记为0的缺失代码。例如,即使来自组4的两条记录具有不同的代码,我们也不会将该组保留在最终数据帧中,因为其中一条代码缺失

上面示例中的结果数据帧应如下所示:

    group brand  code
1       2     A  1410
2       2     B  1390
3       2     C  1390
4       2     X     0
5       3     B  3670
6       3     C  4870
7       3     X     0
我没有设法解决这个问题。我认为第一步应该是创建一个掩码来删除缺少(0)代码的记录。比如:

mask = df['code'].eq(0)
df = df[~mask]

print(df)

    group brand  code
0       1     A  2185
1       1     B  2185
3       2     A  1410
4       2     B  1390
5       2     C  1390
7       3     B  3670
8       3     C  4870
10      4     A  2000
现在只保留至少两个不同代码的组,但我不知道如何在Python中解决这个问题。此外,此方法将删除最终数据帧中缺少代码的记录,这是我不希望看到的。我想了解整个团队的情况

任何额外的帮助都将不胜感激

这是
transform()

输出:

   group brand  code
3      2     A  1410
4      2     B  1390
5      2     C  1390
6      2     X     0
7      3     B  3670
8      3     C  4870
9      3     X     0
   group brand  code
3      2     A  1410
4      2     B  1390
5      2     C  1390
6      2     X     0
7      3     B  3670
8      3     C  4870
9      3     X     0
选项2:类似的想法,但没有lambda功能:

mask = (df['code'].mask(df['code']==0)    # mask out the 0 values
            .groupby(df['group'])         # groupby
            .transform('nunique')         # count uniques
            .gt(1)                        # at least 2
       )
我们还可以使用:

或者肯定比以前更快:

( df.assign(code=df['code'].replace(0,np.nan))
  .groupby('group')
  .filter(lambda x: x.code.nunique()>1)
  .fillna({'code':0}) )
输出

( df.assign(code=df['code'].replace(0,np.nan))
  .groupby('group')
  .filter(lambda x: x.code.nunique()>1)
  .fillna({'code':0}) )
   group brand  code
3      2     A  1410
4      2     B  1390
5      2     C  1390
6      2     X     0
7      3     B  3670
8      3     C  4870
9      3     X     0