我要用相当于该子集命令R对于一些代码我写作。

这里是我的数据:

col1    col2    col3    col4    col5
100002  2006    1.1 0.01    6352
100002  2006    1.2 0.84    304518
100002  2006    2   1.52    148219
100002  2007    1.1 0.01    6292
10002   2006    1.1 0.01    5968
10002   2006    1.2 0.25    104318
10002   2007    1.1 0.01    6800
10002   2007    4   2.03    25446
10002   2008    1.1 0.01    6408

我想要的子集的数据的基础上的内容 col1col2.(唯一值在1列有100002和10002,并在第2列有2006,2007和2008年。)

这可以通过在R使用的子集命令的,有什么相似蟒蛇?

有帮助吗?

解决方案

同时迭代基础的回答是完全没有,如果你的工作与顽固阵列(如你所说,你是)有更好和更快的方式选择的事情:

import numpy as np
data = np.array([
        [100002, 2006, 1.1, 0.01, 6352],
        [100002, 2006, 1.2, 0.84, 304518],
        [100002, 2006, 2,   1.52, 148219],
        [100002, 2007, 1.1, 0.01, 6292],
        [10002,  2006, 1.1, 0.01, 5968],
        [10002,  2006, 1.2, 0.25, 104318],
        [10002,  2007, 1.1, 0.01, 6800],
        [10002,  2007, 4,   2.03, 25446],
        [10002,  2008, 1.1, 0.01, 6408]    ])

subset1 = data[data[:,0] == 100002]
subset2 = data[data[:,0] == 10002]

这就产生了

subset1:

array([[  1.00002e+05,   2.006e+03,   1.10e+00, 1.00e-02,   6.352e+03],
       [  1.00002e+05,   2.006e+03,   1.20e+00, 8.40e-01,   3.04518e+05],
       [  1.00002e+05,   2.006e+03,   2.00e+00, 1.52e+00,   1.48219e+05],
       [  1.00002e+05,   2.007e+03,   1.10e+00, 1.00e-02,   6.292e+03]])

subset2:

array([[  1.0002e+04,   2.006e+03,   1.10e+00, 1.00e-02,   5.968e+03],
       [  1.0002e+04,   2.006e+03,   1.20e+00, 2.50e-01,   1.04318e+05],
       [  1.0002e+04,   2.007e+03,   1.10e+00, 1.00e-02,   6.800e+03],
       [  1.0002e+04,   2.007e+03,   4.00e+00, 2.03e+00,   2.5446e+04],
       [  1.0002e+04,   2.008e+03,   1.10e+00, 1.00e-02,   6.408e+03]])

如果你不知道的唯一价值在第一列中在此之前,你可以使用 numpy.unique1d 或系统的功能 set 找到他们。

编辑:我只是意识到你想要的来选择数据,你有着独特的组合,两栏...在这种情况下,你可能会做这样的事情:

col1 = data[:,0]
col2 = data[:,1]

subsets = {}
for val1, val2 in itertools.product(np.unique(col1), np.unique(col2)):
    subset = data[(col1 == val1) & (col2 == val2)]
    if np.any(subset):
        subsets[(val1, val2)] = subset

(我存储的子集,作为一个dict,与关键的是组合...当然,还有其他(和更好的,这取决于你是什么做的)方式做到这一点!)

其他提示

subset()中的R是非常类似于在Python filter()。由于参考笔记,这将是隐式列表解析使用,所以最简洁和清晰的方式来写代码可能是

[ item for item in items if item.col2 == 2006 ] 

如果,例如,你的数据行是在可迭代称为items

由于我不熟悉有R,也没有这个子集命令的工作如何根据你的描述,我可以建议你看一看itertool的GROUPBY功能。如果给其输出值的函数,可以形成基于该函数的输出组。从 GROUPBY 采取:

groups = []
uniquekeys = []
data = sorted(data, key=keyfunc)
for k, g in groupby(data, keyfunc):
    groups.append(list(g))      # Store group iterator as a list
    uniquekeys.append(k)

然后你有你的子集。然而,当返回的值是不完全成熟的名单千万小心。他们是迭代器。

我假设正在上一行一行地的基础返回自己的价值观。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top