pd.eval并且eval是pandas API套件中功能强大但被低估的功能,它们的使用远未完全记录或理解.小心适量,eval并且engine可以极大地简化代码,提高性能,并成为创建动态工作流的强大工具.
这个规范QnA的目的是让用户更好地理解这些功能,讨论一些鲜为人知的功能,如何使用它们,以及如何最好地使用它们,以及清晰易懂的示例.这篇文章将讨论的两个主要议题是
parser,df2并x在争论pd.eval,以及它们如何被用来计算表达式eval,eval并且engine,当每个功能是合适的用于动态执行.这篇文章不能替代文档(答案中的链接),所以请完成它!
我将以这样的方式构建一个问题,以便开启对所支持的各种功能的讨论parser.
给出两个DataFrame
np.random.seed(0)
df1 = pd.DataFrame(np.random.choice(10, (5, 4)), columns=list('ABCD'))
df2 = pd.DataFrame(np.random.choice(10, (5, 4)), columns=list('ABCD'))
df1
A B C D
0 5 0 3 3
1 7 9 3 5
2 2 4 7 6
3 8 8 1 6
4 7 7 8 1
df2
A B C …Run Code Online (Sandbox Code Playgroud) 我试图采用以下R语句并使用NumPy将其转换为Python:
1 + apply(tmp,1,function(x) length(which(x[1:k] < x[k+1])))
Run Code Online (Sandbox Code Playgroud)
是否有Python等效于哪个()?这里,x是矩阵tmp中的行,k对应于另一个矩阵中的列数.
以前,我尝试了以下Python代码,并收到了值错误(操作数无法与形状一起广播):
for row in tmp:
print np.where(tmp[tmp[:,range(k)] < tmp[:,k]])
Run Code Online (Sandbox Code Playgroud) 之前已经问过这个问题的变化,我仍然无法理解如何根据我想要设置的条件实际切片python系列/ pandas数据帧.
在R中,我要做的是:
df[which(df[,colnumber] > somenumberIchoose),]
Run Code Online (Sandbox Code Playgroud)
which()函数在数据框的列中查找大于somenumberIchoose的行的条目索引,并将其作为向量返回.然后,我使用这些行索引对数据帧进行切片,以指示我想在新表单中查看哪些数据帧行.
在python中有相同的方法吗?我已经看过枚举的引用,在阅读文档后我并不完全理解.我的示例为了获得行索引,现在看起来像这样:
indexfuture = [ x.index(), x in enumerate(df['colname']) if x > yesterday]
Run Code Online (Sandbox Code Playgroud)
但是,我继续收到无效的语法错误.我可以通过循环遍历值,并自己手动进行搜索来破解解决方法,但这似乎非常非pythonic和低效.
枚举()究竟是做什么的?什么是在矢量中找到满足所需参数的值索引的pythonic方法?
注意:我正在使用Pandas作为数据帧
我是 Python 和 Pandas 的新手。
我想security_id在我的 Pandas 数据框中找到某个值(假设)的索引,因为那是列开始的地方。(列上方有未知数量的行带有无关数据,左侧还有许多空“列”。)
据我所知,isin方法只返回一个关于值是否存在的布尔值,而不是它的索引。
我如何找到这个值的索引?
我有以下数据框:
Date best a b c d
1990-01-01 a 5 4 7 2
1991-01-02 c 10 1 2 0
1992-01-03 d 2 1 4 12
1993-01-04 a 5 8 11 6
Run Code Online (Sandbox Code Playgroud)
我希望获得行 ID,其中df['Date' == '1992-01-03'].
预期回报是2.
有任何想法吗?
我目前有一个MxN数据框,其中包含优化问题的解决方案."有效"i,j代表{M}的j和{N}对中的j由1表示,"无效"对由0表示.我需要确定所有活动单元的i,j值,希望避免for循环索引或列.
这将是一个例子:
In [73]: sol_df
Out[73]:
1 2 3 4 5
1 0 0 1 0 0
2 1 0 0 0 0
3 0 1 0 0 0
4 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我需要的是一对对(列表会做):
[(1,3), (2,1), (3,2)]
Run Code Online (Sandbox Code Playgroud)
有办法吗?
谢谢!
一个.
编辑:解释不清楚EDIT2:我的解释仍不清楚