当前位置: 首页 > 知识库问答 >
问题:

使用多个列范围进行数据帧切片[重复]

蒋星雨
2023-03-14

我有一个熊猫数据框,有许多标记列。例如:

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')]

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

这个问题与使用Pandas和Pandas Dataframe选择多个不连续列/切片切片多列范围有关,但我希望使用列名而不是索引切片<代码>np。r 似乎不支持字符串范围,只支持数字范围。

共有1个答案

牛迪
2023-03-14

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

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
 类似资料:
  • 给定任何熊猫数据帧。我想选择列A, B和F: Z 我已经尝试过了但是没有成功。请告诉我怎么做。

  • 问题内容: 用更多索引范围(例如by和)对数据帧进行切片的pythonic方法是什么? 我想要一个更优雅的方式: 结果: 像这样的东西会更优雅: 问题答案: 您可以使用numpy的“切片技巧”: 给出:

  • 我有一个数据框架,看起来像这样: 我想对数据帧进行切片,以便结果包含所有以<code>foo 获得此结果的一种方法是 但这感觉像是一个非常繁琐的方法,必须有一个更“pythonic”的方法..

  • 我有一个多索引数据框,看起来像 uid tid文本 abc x t1 bcd y t2 uid 和 tid 是索引。我有一个 uid 列表,并希望获取与该列表中的 uid 相对应的行,但保留第 2 级索引值 (tid)。我想在不运行任何显式循环的情况下执行此操作。这可能吗?

  • 我想按多个列对熊猫数据框进行分组。每个Row都有一个整数、一个Name和一个额外的数值。我希望最终的Dataframe包含Name具有最高整数的每一行。 通过分组数据帧,只有第0行应该消失。第3行和第4行仍应包括在数据框中。

  • 我正在使用从h5文件加载的调查数据作为通过熊猫包。在此中,所有行都是单个调查的结果,而列是单个调查中所有问题的答案。 我的目标是将此数据集缩减为更小的,仅包括在某个问题上具有某个描述答案的行,即在本列中具有相同的值。我能够确定具有此条件的所有行的索引值,但我找不到如何删除这些行或仅使用这些行创建新的df。