[英]Filter dataframe based on groupby and pandas series
我有以下数据框:
dct ={'store':('A','A','A','A','A','B','B','B','C','C','C'),
'station':('aisle','aisle','aisle','window','window','aisle','aisle','aisle','aisle','window','window'),
'produce':('apple','apple','orange','orange','orange','apple','apple','orange','apple','apple','orange')}
df = pd.DataFrame(dct)
print(df)
store station produce
A aisle apple
A aisle apple
A aisle orange
A window orange
A window orange
B aisle apple
B aisle apple
B aisle orange
C aisle apple
C window apple
C window orange
子集df基于:[基于商店、站点和生产的重复数据计数]与[基于商店、站点和生产的总计数]不同。 换句话说,如果任何商店只有基于商店、车站和生产的重复行,则将其删除,但即使找到一个非重复记录,也要包括行:
预期的数据框演练
store station produce
A aisle apple
A aisle apple
A aisle orange
A window orange ->exclude because store, station and produce match
A window orange ->exclude because store, station and produce match
B aisle apple
B aisle apple
B aisle orange
C aisle apple
C window apple
C window orange
预期数据框:
store station produce
A aisle apple
A aisle apple
A aisle orange
B aisle apple
B aisle apple
B aisle orange
C aisle apple
C window apple
C window orange
来自商店“B”的苹果被包括在内,因为同一商店站也存在“橙色”,这使它成为例外。 从概念上讲,我明白该怎么做,但无法在代码中进行翻译。
s = (df.duplicated(subset = ['store','station','produce'], keep=False))
sample = df[df.groupby(['store','station'])['station_ID'].sum().eq(dupli_count)] --> something going wrong here
我们可以用transform
nunique
试试groupby
df = df[df.groupby(['store', 'station'])['produce'].transform('nunique')!=1]
Out[43]:
store station produce
0 A aisle apple
1 A aisle apple
2 A aisle orange
5 B aisle apple
6 B aisle apple
7 B aisle orange
9 C window apple
10 C window orange
如果我们只想保留一行,请更新
g = df.groupby(['store', 'station'])['produce']
df = df[(g.transform('nunique')!=1) | (g.transform('count')==1)]
df
Out[46]:
store station produce
0 A aisle apple
1 A aisle apple
2 A aisle orange
5 B aisle apple
6 B aisle apple
7 B aisle orange
8 C aisle apple
9 C window apple
10 C window orange
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.