【问题标题】:Select multiple slices in pandas dataframe using a list or another dataframe使用列表或其他数据框在熊猫数据框中选择多个切片
【发布时间】:2023-02-02 14:14:10
【问题描述】:

我有一个包含 ["data"] 列的大型数据框,我需要用它创建多个较小的数据框集。我想一次选择 df["data"][1:3]、df["data"][4:5],而不必使用 for 循环并迭代选择每个切片。

矢量化解决方案或 .apply 解决方案将使这更快

类似于使用以下数据框(称为“选择”)作为索引输入:

from to.
1 3
4 5.

并尝试做类似的事情: df["data"][selection["from"]:selection["to"]] 它会输出 df[1:3], df[4:5]。

【问题讨论】:

  • 只是为了澄清一下:您是要选择行还是列? df[1:3] 选择第 1、2 和 3 列。
  • 行 - 尝试同时选择第 1:3 行和第 4:5 行,而不必进行循环

标签: pandas dataframe vectorization slice apply


【解决方案1】:

您可以使用 Pandas 的 .iloc 方法根据“选择”数据框中的索引来索引您的数据框。然后,您可以使用 .apply 方法迭代“选择”数据帧中的每一行,并提取原始数据帧的相应切片。这是一个例子:

def extract_data(row, df):
  return df.iloc[row["from"]-1:row["to"]]

result = selection.apply(extract_data, axis=1, df=df)

extract_data 函数接收一行“selection”数据帧和原始数据帧,并根据“from”和“to”列中的索引返回切片数据帧。 .apply 方法然后将此函数应用于“选择”数据帧中的每一行,并返回一个带有切片数据帧的系列。

此解决方案将在不使用 for 循环的情况下为您提供所需的结果,并且应该比使用 for 循环并迭代每个切片更快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 2017-02-22
    • 1970-01-01
    • 2019-12-09
    • 2021-10-05
    • 2013-01-17
    • 2018-03-30
    相关资源
    最近更新 更多