如何获得熊猫中的每一个第n列?

时间:2016-03-10 22:22:34

标签: python pandas

我有一个如下所示的数据框:

    a1    b1    c1    a2    b2    c2    a3    ...
x   1.2   1.3   1.2   ...   ...   ...   ...
y   1.4   1.2   ...   ...   ...   ...   ...
z   ...

我想要的是按每第n列进行分组。换句话说,我想要一个包含所有as的数据帧,一个用bs,一个用cs

    a1     a2     a4
x   1.2    ...    ...
y
z

在另一个SO问题中,我看到有可能做df.iloc[::5,:],例如,获得每第5个原始数据。我当然可以df.iloc[:,::3]来获得c cols,但它并不适合获得a和b。

有什么想法吗?

3 个答案:

答案 0 :(得分:18)

切片列:

df[df.columns[::2]]

获取每个第n列

示例:

In [2]:
cols = ['a1','b1','c1','a2','b2','c2','a3']
df = pd.DataFrame(columns=cols)
df

Out[2]:
Empty DataFrame
Columns: [a1, b1, c1, a2, b2, c2, a3]
Index: []

In [3]:
df[df.columns[::3]]
Out[3]:

Empty DataFrame
Columns: [a1, a2, a3]
Index: []

您也可以使用startswith

进行过滤
In [5]:
a = df.columns[df.columns.str.startswith('a')]
df[a]

Out[5]:
Empty DataFrame
Columns: [a1, a2, a3]
Index: []

并为b cols和c cols等做同样的事情。

您可以使用以下内容获取一组所有唯一列前缀:

In [19]:
df.columns.str.extract(r'([a-zA-Z])').unique()

Out[19]:
array(['a', 'b', 'c'], dtype=object)

然后,您可以使用这些值来使用startswith

过滤列

答案 1 :(得分:2)

以下内容应该有效:

df.ix[:, ::2] - get every second column, beginning with first (here all a's)
df.ix[:, 1::2] - get every second column, beginning with second (b's)
....

我刚刚搜索了同样问题的解决方案并解决了它。

答案 2 :(得分:0)

在当前版本(0.24)中,此方法有效:

获取“ a”列:

df.iloc[:, ::3]

获取“ b”列:

df.iloc[:, 1::3]

获取“ c”列:

df.iloc[:, 2::3]