当前位置: 首页 > 知识库问答 >
问题:

R的等效物,其中()

成浩漫
2023-03-14

以前有人问过这个问题,但我仍然无法理解如何根据我想要设置的条件实际分割python系列/熊猫数据帧。

在R中,我想做的是:

df[which(df[,colnumber] > somenumberIchoose),]

函数的作用是:查找数据帧中大于SomeNumberChoose的列中的行条目的索引,并将其作为向量返回。然后,我使用这些行索引对数据帧进行切片,以指示我希望在新表单中查看数据帧的哪些行。

是否有一个等效的方式在python中做到这一点?我看到了枚举的参考文献,在阅读了留档后,我并不完全理解。为了获取行索引,我的示例现在看起来像这样:

indexfuture = [ x.index(), x in enumerate(df['colname']) if x > yesterday]  

然而,我不断得到一个无效的语法错误。我可以通过对值进行循环和手动搜索来解决问题,但这似乎极不符合pythonic,效率也很低。

enumerate()到底做什么?在向量中找到满足所需参数的值的索引的python方法是什么?

注意:我使用熊猫作为数据

共有3个答案

督飞羽
2023-03-14

enumerate()返回一个迭代器,该迭代器在每次迭代中生成一个(index, project)元组,因此您不能(也不需要)再次调用. index()

此外,您的列表理解语法是错误的:

indexfuture = [(index, x) for (index, x) in enumerate(df['colname']) if x > yesterday]

测试用例:

>>> [(index, x) for (index, x) in enumerate("abcdef") if x > "c"]
[(3, 'd'), (4, 'e'), (5, 'f')]

当然,您不需要解压缩元组:

>>> [tup for tup in enumerate("abcdef") if tup[1] > "c"]
[(3, 'd'), (4, 'e'), (5, 'f')]

除非你只对指数感兴趣,在这种情况下,你可以做这样的事情

>>> [index for (index, x) in enumerate("abcdef") if x > "c"]
[3, 4, 5]
郎长卿
2023-03-14

就我对R的了解,你可能会更喜欢使用Numpy——一个类似MATLAB的科学计算包。

如果您希望数组的索引值可被2整除,那么以下方法将起作用。

arr = numpy.arange(10)
truth_table = arr % 2 == 0
indices = numpy.where(truth_table)
values = arr[indices]

使用多维数组也很容易

arr2d = arr.reshape(2,5)
col_indices = numpy.where(arr2d[col_index] % 2 == 0)
col_values = arr2d[col_index, col_indices]
郦楷
2023-03-14

我可能不太明白这个问题,但看起来回答比你想象的要容易:

使用数据帧:

df['colname'] > somenumberIchoose

返回包含真/假值和数据帧原始索引的系列。

然后,您可以在原始数据帧上使用该布尔序列,并获得要查找的子集:

df[df['colname'] > somenumberIchoose]

应该足够了。

看http://pandas.pydata.org/pandas-docs/stable/indexing.html#boolean-indexing

 类似资料:
  • 我尝试使用以下R语句,并使用NumPy将其转换为Python: 有与which()等价的Python吗?这里,x是矩阵tmp中的行,k对应于另一个矩阵中的列数。 之前,我尝试了以下Python代码,并收到一个值错误(操作数无法与形状一起广播):

  • 问题内容: 因此,查找记录时,MongoDB默认为“ AND”。例如: 上面的查询找到了> = 30 AND <= 40岁的用户。 我如何找到年龄<= 30 或 > = 40岁的用户? 问题答案: 在不久的将来会有一个or运算符。每晚的Mongodb版本已经有$ or。您还可以使用$ where并使用JavaScript表示or。 参见http://groups.google.com/group/

  • 问题内容: python中是否有类似于R中的dput()函数的函数? 问题答案: 有几种将Python对象序列化为文件的选项: 以JSON格式存储数据。它是非常可读和可编辑的,但是只能存储列表,字典,字符串,数字,布尔值,因此没有复合对象。您需要先使模块可用。 可以存储大多数对象。 不常见: 该模块将多个Python对象存储在DBM数据库中,大多数情况下就像一个persistent 。 :不确定何

  • Python中是否有类似于R中dput()函数的函数?

  • 在搜索中,我看到的都是需要用户点击才能消失的警报。

  • 我精通RxJS,并在Reactor framework(java)方面迈出了第一步。 Reactor中行为主体的等效物是什么? 或者与RxJS相比,Reactor中使用的模式完全不同吗?对于了解RxJS的人来说,有什么好的参考资料可以学习Reactor吗?