假设我有以下形式的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开头的行等。
答案 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]