【发布时间】:2020-02-10 23:30:33
【问题描述】:
我正在尝试构建一种快速的 Pandas 方法,用于在满足某些条件时从 Dataframe 中删除某些行。具体来说,如果该行中的某个其他值等于 0,我想删除数据框中某个变量的第一次出现。这可能是最容易通过示例解释的:
foo = np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3])
bar = np.array([1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1])
df = pd.DataFrame({'foo': foo, 'bar':bar})
# So df is:
idx | foo | bar
0 1 1
1 1 0
2 1 1
3 1 0
4 1 1
5 1 0
6 1 1
7 1 0
8 1 1
9 1 0
10 1 1
11 2 0
12 2 1
13 2 0
14 2 1
15 3 1
16 3 1
17 3 0
18 3 1
当 'foo' 列是新值时,我想查看第一行,然后如果该行中的 'bar' 值 = 0,则将其从数据框中删除。
我可以使用 groupby 找到何时满足此条件:
df.groupby('foo').first()
# Result:
bar
foo
1 1
2 0
3 1
所以我看到我需要在 foo = 2 时删除第一行(即,在我的原始数据框中删除索引 = 11 的行)。但是,由于形状/大小不同,我无法确定如何将此 groupby 结果用作原始数据框的掩码。
我发现了一个关于 groupby 修改的相关问题 (Drop pandas dataframe rows based on groupby() condition),但在此示例中,当满足此条件时,它们会删除所有行,而我只想删除第一行。
请问可以吗?
【问题讨论】:
标签: python pandas dataframe pandas-groupby