pandas 使用列表中的位置值为python Dataframe 添加子集

mepcadol  于 2022-12-02  发布在  Python
关注(0)|答案(1)|浏览(125)

我有一个包含原始数据的 Dataframe ,我想使用两个不同的列表为每列选择不同的行范围:一个包含要选择的第一行位置,另一个包含最后一行位置。

INPUT

| Index    | Column A | Column B |
|:--------:|:--------:|:--------:|
|      1   |    2     |    8     |
|      2   |    4     |    9     |
|      3   |    1     |    7     |

first_position=[1,2]
last_position=[2,3]

EXPECTED OUTPUT

| Index    | Column A | Column B |
|:--------:|:--------:|:--------:|
|      1   |    2     |    9     |
|      2   |    4     |    7     |

我可以使用哪个功能?谢谢!
我尝试过df.filter,但我认为它不接受list作为输入。

toiithl6

toiithl61#

基本上,据我所知,在DataFrame中有两个有意义的列。
因此,我建议使用"Index"列作为index

df.set_index(df.columns[0], inplace=True)

这样,您可以使用.loc

df_out = pd.concat(
    [
        df.loc[first_position, "Column A"].reset_index(drop=True),
        df.loc[last_position, "Column B"].reset_index(drop=True)
    ],
    axis=1
)

但是,将索引存储在单独的list中,您将需要自己监视它们,这可能不太方便。
相反,我会用切片重新组织它:

df_out = pd.concat(
    [
        df[["Column A"]][:-1].reset_index(drop=True),
        df[["Column B"]][1:].reset_index(drop=True)
    ],
    axis=1
)

在这两种情况下,索引都会被破坏。如果这很重要,那么就需要没有.reset_index(drop=True)的场景。

相关问题