【发布时间】:2022-07-01 05:55:17
【问题描述】:
假设我有一个数据框定义为
pd.DataFrame({'col1': ['foo', '', '', 'foo', 'quux', 'baz', 'baz', 'baz'],
'col2': ['', 'gb', '', 'de', 'gb', '', 'es', 'es'],
'col3': [123, float("NaN"), 456, 723, 456, 123, 123, 721],
'col4': ['', '', 'val1', 'val2', 'val3', '', 'val4', 'val5'],
'value': [1, 1, .4, .5, .3, 1, .5, .4]})
看起来像
| index | col1 | col2 | col3 | col4 | value |
|---|---|---|---|---|---|
| 0 | foo | 123.0 | 1.0 | ||
| 1 | gb | NaN | 1.0 | ||
| 2 | 456.0 | val1 | 0.4 | ||
| 3 | foo | de | 723.0 | val2 | 0.5 |
| 4 | quux | gb | 456.0 | val3 | 0.3 |
| 5 | baz | 123 | 1 | ||
| 6 | baz | es | 123 | val4 | .5 |
| 7 | baz | es | 721 | val5 | 0.4 |
我想过滤此表并删除值等于 1.0 的所有行,以及填充列中与 value==1.0 行具有相同值的所有行。因此,在上表中,我们将删除第 0、1 和 5 行,因为 value==1.0,同时删除第 3 行,因为 col1=='foo',第 4 行,因为 col2=='gb',第 6 行,因为col1='baz' 和 col3=123。应保留第 2 行和第 7 行。
| index | col1 | col2 | col3 | col4 | value |
|---|---|---|---|---|---|
| 2 | 456.0 | val1 | 0.4 | ||
| 3 | foo | de | 723.0 | val2 | 0.5 |
| 7 | baz | es | 721 | val5 | 0.4 |
最好的方法是什么?我可以找到 value==1.0 的所有行,然后遍历它们并从表中过滤掉在设置列中具有相同值的所有行,但是遍历数据框行并不理想。我也想过进行合并,但我也不确定如何告诉合并忽略没有设置值的列。
【问题讨论】:
-
如果“foo”出现在任何列中,您是否要过滤行?还是只是'col1','col2'?
-
如果 'foo' 出现在 'col1' 中,如果 'gb' 出现在 'col2' 中。
-
只有两个特定的字符串 'foo' 、 'gb' 或包含 1.0 的行中的任何字符串?
-
任何包含 1.0 的行中的字符串。以及列的任意组合。因此,如果还有一行 col1 = 'something' 和 col2 = 'else' 和 value = 1.0,我想过滤 col1 = 'something' AND col2 = 'else' 的任何行,无论 col3 中的值如何和 col4。
-
为什么虽然 col1='baz' 没有删除第 7 行?