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