从DataFrame中选择组中的特定行

时间:2014-03-30 20:03:52

标签: python pandas

我有以下格式的数据:

56.00 101.85 52.40 101.85 56.000000 101.850000 1
56.00 100.74 50.60 100.74 56.000000 100.740000 2
56.00 100.74 52.10 100.74 56.000000 100.740000 3
56.00 102.96 52.40 102.96 56.000000 102.960000 4
56.00 100.74 55.40 100.74 56.000000 100.740000 5
56.00 103.70 54.80 103.70 56.000000 103.700000 6
56.00 101.85 53.00 101.85 56.000000 101.850000 7
56.00 102.22 52.10 102.22 56.000000 102.220000 8
56.00 101.11 55.40 101.11 56.000000 101.110000 9
56.00 101.11 54.80 101.11 56.000000 101.110000 10
56.00 101.85 52.40 101.85 56.000000 101.850000 1
56.00 100.74 50.60 100.74 56.000000 100.740000 2
........

我需要的是特定id(最后一列)的数据。 我曾经做过numpy

d=loatxt('filename')
wanted = d[ d[:,6]==id ]

现在我&#39;在学习Pandas并发现pandas.read_csv() <{1}}。

所以逻辑上我想知道是否有可能用熊猫做同样的过滤(也许它更快)。

我的第一个想法是尝试loadtxt()如下:

groupby

问题是:是否有一种相对简单的方法可以从p=pd.read_csv('filename', sep= ' ', header=None, names=['a', 'b', 'x', 'y', 'c', 'd', 'id']) d = p.groupby(['id']) #[ i, g in p.groupby(['id']) if i ==1] # syntax error, why? 的{​​{1}}行中p进行选择?

修改

尝试提出的解决方案:

id==1

似乎%timeit t_1 = n[ n[:,6]==1 ][:,2:4] 10 loops, best of 3: 60.8 ms per loop %timeit t_2 = p[ p['id'] == 1 ][['x', 'y']] 10 loops, best of 3: 70.9 ms per loop numpy

快一点

这意味着在这种情况下最快的工作方式是: 1)首先用Pandas Pandas读取数据 2)将数据转换为read_csv 3)而不是工作。

这个结论是否正确?

1 个答案:

答案 0 :(得分:1)

你可以像使用numpy那样做,只是现在用它的名字引用列:

wanted = d[d['id'] == id]