在Pandas中选择具有类似索引名称的行

时间:2014-04-06 17:08:55

标签: python pandas

假设我有以下形式的Pandas DataFrame:

     a  b  c
a_1  1  4  2
a_2  3  3  5
a_3  4  7  2
b_1  2  9  8
b_2  7  2  6
b_3  5  4  1
c_1  3  1  3
c_2  8  6  6
c_3  9  3  7

有没有办法只能选择名称相似的行?对于上面的DataFrame,这意味着只选择以a开头的行,或者以b开头的行等。

3 个答案:

答案 0 :(得分:4)

使用@Akavall设置代码

df = pd.DataFrame(data = my_data, index=['a_1', 'a_2', 'b_1', 'b_2'], columns=['a', 'b'])

In [1]: my_data = np.arange(8).reshape(4,2)

In [2]: my_data[0,0] = 4

In [3]: df = pd.DataFrame(data = my_data, index=['a_1', 'a_2', 'b_1', 'b_2'], columns=['a', 'b'])

In [5]: df.filter(regex='a',axis=0)
Out[5]: 
     a  b
a_1  4  1
a_2  2  3

[2 rows x 2 columns]

请注意,一般情况下,这可以更好地构成多指数

In [6]: df.index = MultiIndex.from_product([['a','b'],[1,2]])

In [7]: df
Out[7]: 
     a  b
a 1  4  1
  2  2  3
b 1  4  5
  2  6  7

[4 rows x 2 columns]

In [8]: df.loc['a']
Out[8]: 
   a  b
1  4  1
2  2  3

[2 rows x 2 columns]

In [9]: df.loc[['a']]
Out[9]: 
     a  b
a 1  4  1
  2  2  3

[2 rows x 2 columns]

答案 1 :(得分:0)

我认为没有内置pandas方法可以做到这一点,但这是一种方式:

import numpy as np
import pandas as pd

my_data = np.arange(8).reshape(4,2)
my_data[0,0] = 4

df = pd.DataFrame(data = my_data, index=['a_1', 'a_2', 'b_1', 'b_2'], columns=['a', 'b'])

结果:

>>> df
     a  b
a_1  4  1
a_2  2  3
b_1  4  5
b_2  6  7
>>> start_with_a = [ind for ind, ele in enumerate(df.index) if ele[0] == 'a']
>>> start_with_a
[0, 1]
>>> df.loc[start_with_a]
     a  b
a_1  4  1
a_2  2  3

答案 2 :(得分:0)

通常,您可以使用.index和.columns属性访问行索引和列。

因此您可以轻松地以编程方式获取以 a 开头的行

needed_rows = [row for row in df.index if row.startswith('a')]

然后您可以像这样使用这些行

df.loc[needed_rows]