python - pandas:使用运算符链接过滤 DataFrame 的行

pandas 中的大多数操作都可以通过操作符链来完成(groupbyaggregateapply 等) ,但我发现过滤行的唯一方法是通过普通括号索引

df_filtered = df[df['column'] == value]

这并不吸引人,因为它需要我将 df 分配给一个变量,然后才能过滤其值。有没有更类似于以下的内容?

df_filtered = df.mask(lambda x: x['column'] == value)

最佳答案

我不完全确定你想要什么,你的最后一行代码也无济于事,但无论如何:

“链接”过滤是通过“链接” bool 索引中的条件来完成的。

In [96]: df
Out[96]:
   A  B  C  D
a  1  4  9  1
b  4  5  0  2
c  5  5  1  0
d  1  3  9  6

In [99]: df[(df.A == 1) & (df.D == 6)]
Out[99]:
   A  B  C  D
d  1  3  9  6

如果你想链接方法,你可以添加你自己的掩码方法并使用那个。

In [90]: def mask(df, key, value):
   ....:     return df[df[key] == value]
   ....:

In [92]: pandas.DataFrame.mask = mask

In [93]: df = pandas.DataFrame(np.random.randint(0, 10, (4,4)), index=list('abcd'), columns=list('ABCD'))

In [95]: df.ix['d','A'] = df.ix['a', 'A']

In [96]: df
Out[96]:
   A  B  C  D
a  1  4  9  1
b  4  5  0  2
c  5  5  1  0
d  1  3  9  6

In [97]: df.mask('A', 1)
Out[97]:
   A  B  C  D
a  1  4  9  1
d  1  3  9  6

In [98]: df.mask('A', 1).mask('D', 6)
Out[98]:
   A  B  C  D
d  1  3  9  6

https://stackoverflow.com/questions/11869910/

相关文章:

python - 如何将本地时间字符串转换为 UTC?

python - 为什么使用 argparse 而不是 optparse?

python - 在 Python 中将 datetime.date 转换为 UTC 时间戳

python - 为什么 'x' 中的 ('x' 比 'x' == 'x' 快?

python - 在 Python 中打印多个参数

python - '太多的值无法解包',迭代一个字典。键=>字符串,值=>列表

python - 动态打印一行

python - 测试 Python 中是否存在可执行文件?

python - 得到一系列列表的笛卡尔积?

python - 如何计算 ndarray 中某个项目的出现次数?