假设我有一个像这样的
为了选择所有c == 2且a == 'x'的行,我可以像这样操作:
有没有一种方法可以对行进行迭代优化?
DataFrame
:df = pd.DataFrame([['x', 1, 2], ['x', 1, 3], ['y', 2, 2]],
columns=['a', 'b', 'c'])
为了选择所有c == 2且a == 'x'的行,我可以像这样操作:
df[(df['a'] == 'x') & (df['c'] == 2)]
或者我可以通过创建临时变量进行迭代的细化。
df1 = df[df['a'] == 'x']
df2 = df1[df1['c'] == 2]
有没有一种方法可以对行进行迭代优化?
(
df
.refine(lambda row: row['a'] == 'x') # this method doesn't exist
.refine(lambda row: row['c'] == 2)
)
DataFrame.query
语法在单个列上进行简单比较吗? - duckworthdeval
/query
更广泛的话题。我正在研究filter
方法,并想知道是否有类似于DataFrame内容(而不是轴)的东西可能会有用。我不反对使用refine
... - Phillip CloudDataFrame.filter
过滤轴信息(例如,匹配正则表达式的列),而DataFrame.refine
方法将基于DataFrame
中的值进行过滤。类似于DataFrame.rename
和DataFrame.replace
之间的区别。 - Phillip Clouddict
查找),除非您使用比此更慢的东西重载__getattribute__
或__getattr__
。在DataFrame
(和pandas >= 0.12
中的Series
)的情况下,属性访问被重载为使用索引进行查找(其由khash哈希表支持),我认为这也提供了摊销的常数时间查找。因此,在这种情况下,没有属性访问的性能惩罚,只是看起来不太美观:( - Phillip Cloud