具有多个列范围的 Pandas 数据框切片[重复]

Posted

技术标签:

【中文标题】具有多个列范围的 Pandas 数据框切片[重复]【英文标题】:Pandas dataframe slicing with multiple column ranges [duplicate] 【发布时间】:2020-11-06 10:13:58 【问题描述】:

我有一个带有许多标记列的 pandas 数据框。例如:

import numpy as np
import pandas as pd

cols = ['lat', 'long', 'foo', 'bar', 'year', 'month', 'day', 'hour', 'min', 'sec']
df = pd.DataFrame(np.random.random((10, 10)), columns=cols)

我想用多个范围分割这个数据帧。例如:

df.loc[:, ('lat':'long', 'year':'day')]

但这似乎是不可能的。有没有办法做到这一点?

此问题与Slice multiple column ranges with Pandas 和Pandas Dataframe select multiple discontinuous columns/slices 有关,但我想使用列名而不是索引进行切片。 np.r_ 似乎不支持字符串范围,只支持数字范围。

【问题讨论】:

【参考方案1】:

按多个标签范围切片更具挑战性且支持较少,因此让我们尝试在索引范围上切片:

loc = df.columns.get_loc
df.iloc[:, np.r_[loc('lat'):loc('long')+1, loc('year'):loc('day')+1]] 

        lat      long      year     month       day
0  0.218559  0.418508  0.345499  0.166776  0.878559
1  0.572760  0.898007  0.702427  0.386477  0.694439
2  0.803740  0.983359  0.945517  0.649540  0.860832
3  0.873401  0.906277  0.463535  0.610538  0.496282
4  0.187359  0.687674  0.039455  0.647117  0.638054
5  0.169531  0.794548  0.352917  0.484498  0.697736
6  0.022867  0.375123  0.444112  0.498140  0.414346
7  0.729086  0.415919  0.430047  0.734766  0.556216
8  0.138769  0.614932  0.109311  0.539576  0.289299
9  0.037969  0.500108  0.758036  0.262273  0.100859

当按位置索引时,我需要将+1 添加到正确的索引中,因为它是右排他的。


另一种选择是分割各个部分并连接:

ranges = [('lat', 'long'), ('year', 'day')]
pd.concat([df.loc[:, i:j] for i, j in ranges], axis=1)

        lat      long      year     month       day
0  0.218559  0.418508  0.345499  0.166776  0.878559
1  0.572760  0.898007  0.702427  0.386477  0.694439
2  0.803740  0.983359  0.945517  0.649540  0.860832
3  0.873401  0.906277  0.463535  0.610538  0.496282
4  0.187359  0.687674  0.039455  0.647117  0.638054
5  0.169531  0.794548  0.352917  0.484498  0.697736
6  0.022867  0.375123  0.444112  0.498140  0.414346
7  0.729086  0.415919  0.430047  0.734766  0.556216
8  0.138769  0.614932  0.109311  0.539576  0.289299
9  0.037969  0.500108  0.758036  0.262273  0.100859

【讨论】:

以上是关于具有多个列范围的 Pandas 数据框切片[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何切片具有特定列名+列范围的数据框?

使用 iloc 从数据框中切片多个列范围

计算 Pandas 数据框中的平均真实范围列 [重复]

使用numpy数组更改python pandas数据框切片中的元素[重复]

折叠 Pandas 数据框中的行,每列具有不同的逻辑 [重复]

python--pandas切片