在Pandas Python中形成组之前,请检查组是否包含元素

时间:2018-07-19 07:09:15

标签: python pandas

下面是我的数据集示例;

name       status
google    Active
Facebook  Active
Tex       Active
Tex       WUP
Yout      Active

我正在尝试基于名称计数(= 1和> 1)创建两个DataFrames

编写的代码:

#single occurance DatFrame
df_single=pd.concat(g for _, g in df.groupby("name") if len(g) == 1)
#Multi Occurance DataFrame
df_multi=pd.concat(g for _, g in df.groupby("name") if len(g) > 1)

问题是当我有这样的数据

name       status
google    Active
Facebook  Active
Tex       Active

df_multi=pd.concat(g for _, g in df.groupby("name") if len(g) > 1) fails

此操作失败,表示没有数据可合并。我可以在concat之前检查组是否存在吗?

1 个答案:

答案 0 :(得分:2)

我建议使用另一种解决方案-GroupBy.transform用于Series,其大小与原始DataFrame相同,因此可以通过boolean indexing进行过滤:

s = df.groupby("name")['name'].transform('size')
print (s)
0    1
1    1
2    2
3    2
4    1
Name: name, dtype: int64

df_single = df[s == 1]
df_multi = df[s > 1]

如果只想按重复项过滤,则用Series.duplicated创建布尔掩码:

m = df['name'].duplicated(keep=False)
print (m)
0    False
1    False
2     True
3     True
4    False
Name: name, dtype: bool

df_single = df[~m]
df_multi = df[m]

print (df_single)
       name  status
0    google  Active
1  Facebook  Active
4      Yout  Active

print (df_multi)

  name  status
2  Tex  Active
3  Tex     WUP