我有一个如下所示的数据框:
a1 b1 c1 a2 b2 c2 a3 ...
x 1.2 1.3 1.2 ... ... ... ...
y 1.4 1.2 ... ... ... ... ...
z ...
Run Code Online (Sandbox Code Playgroud)
我想要的是每第n列分组.换句话说,我想要一个包含所有as的数据帧,一个用bs,一个用cs
a1 a2 a4
x 1.2 ... ...
y
z
Run Code Online (Sandbox Code Playgroud)
在另一个SO问题中,我看到有可能做到df.iloc[::5,:],例如,获得每个第5个原始数据.我当然可以做到df.iloc[:,::3]c cols但是它不能用于获得a和b.
有任何想法吗?
EdC*_*ica 20
切片列:
df[df.columns[::2]]
Run Code Online (Sandbox Code Playgroud)
获得每个第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: []
Run Code Online (Sandbox Code Playgroud)
您还可以使用startswith以下过滤:
In [5]:
a = df.columns[df.columns.str.startswith('a')]
df[a]
Out[5]:
Empty DataFrame
Columns: [a1, a2, a3]
Index: []
Run Code Online (Sandbox Code Playgroud)
并为b cols和c cols等做同样的事情.
您可以使用以下方法获取一组所有唯一的col前缀:
In [19]:
df.columns.str.extract(r'([a-zA-Z])').unique()
Out[19]:
array(['a', 'b', 'c'], dtype=object)
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用这些值来过滤列 startswith
在当前版本(0.24)中,这是有效的:
获取你的“a”列:
df.iloc[:, ::3]
Run Code Online (Sandbox Code Playgroud)
获取你的“b”列:
df.iloc[:, 1::3]
Run Code Online (Sandbox Code Playgroud)
获取你的“c”列:
df.iloc[:, 2::3]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13855 次 |
| 最近记录: |