我正在处理一个pandas数据框,如下所示。
id x1 y1
0 2 some_val some_val
1 2 some_val some_val
2 2 some_val some_val
3 2 some_val some_val
4 2 some_val some_val
5 0 0 0
6 3 some_val some_val
7 3 some_val some_val
8 0 0 0
9 5 some_val some_val
10 5 some_val some_val
11 5 some_val some_val
12 0 0 0
13 6 some_val some_val
14 6 some_val some_val
15 6 some_val some_val
16 6 some_val some_val
我的原始数据框是数据框,没有所有' 0'值。根据项目要求,每当" id"时,我必须插入具有全0值的行。变化。
现在我要删除任何" id"的所有行它有3行,少于3行。从上面的数据框架中,我想删除所有相应的id-" 3"和" 5" 。我的结果数据框应如下所示:
id x1 y1
0 2 some_val some_val
1 2 some_val some_val
2 2 some_val some_val
3 2 some_val some_val
4 2 some_val some_val
5 0 0 0
6 6 some_val some_val
7 6 some_val some_val
8 6 some_val some_val
9 6 some_val some_val
请告诉我一种获得此结果的方法。
答案 0 :(得分:1)
假设您的DataFrame名称是df,您需要执行以下操作:
df = df[df['col'<>=condition]]
特别针对您的情况:
df = df[df['ProjID'!=3]]
与5.相同。您可以将两个过滤器与'和'组合以提高效率。
这称为DataFrame索引过滤器。
答案 1 :(得分:1)
最简单的答案是删除零行,因为如果你有超过3行,它们可能会妨碍计算。然后做一组。然后过滤。然后像你在其他问题/答案中那样添加回零
d1 = df.query('ProjID != 0').groupby('ProjID').filter(lambda df: len(df) > 3)
d1
ProjID Xcoord Ycoord
0 2 -7.863509 5.221327
1 2 some_val some_val
2 2 some_val some_val
3 2 some_val some_val
4 2 some_val some_val
13 6 some_val some_val
14 6 some_val some_val
15 6 some_val some_val
16 6 some_val some_val
然后加回
pidv = d1.ProjID.values
pid_chg = np.append(pidv[:-1] != pidv[1:], True)
i = d1.index.repeat(pid_chg + 1)
d2 = d1.loc[i, :].copy()
d2.loc[i.duplicated()] = 0
d2.reset_index(drop=True)
ProjID Xcoord Ycoord
0 2 -7.863509 5.221327
1 2 some_val some_val
2 2 some_val some_val
3 2 some_val some_val
4 2 some_val some_val
5 0 0 0
6 6 some_val some_val
7 6 some_val some_val
8 6 some_val some_val
9 6 some_val some_val
10 0 0 0
答案 2 :(得分:0)
您可以使用groupby并过滤小于3的ID,并使用结果列表来索引df。
filtered = df.groupby('ProjID').Xcoord.filter(lambda x: x.count() > 3)
df.iloc[filtered.index.tolist()]
ProjID Xcoord Ycoord
0 2 -7.863509 5.221327
1 2 some_val some_val
2 2 some_val some_val
3 2 some_val some_val
4 2 some_val some_val
13 6 some_val some_val
14 6 some_val some_val
15 6 some_val some_val
16 6 some_val some_val