pandas DataFrame 中的 Select 个单元格,由一系列列标签组成

Select cells in a pandas DataFrame by a Series of its column labels

假设我们有一个 DataFrame 和它的一系列列标签,两者(几乎)共享一个公共索引:

df = pd.DataFrame(...)
s = df.idxmax(axis=1).shift(1)

如何获取给定一系列列的单元格,使用连接系列中相应的列标签从每一行获取值?我想象它会是:

values = df[s]  # either
values = df.loc[s]  # or

在我的示例中,我希望值低于最大行值(我正在做一个穷人的 ML :))

但是我找不到任何按列系列选择单元格的界面。大家有什么想法吗?

与此同时,我使用了这个可怕的片段:

def get_by_idxs(df: pd.DataFrame, idxs: pd.Series) -> pd.Series:
    ts_v_pairs = [
        (ts, row[row['idx']])
        for ts, row in df.join(idxs.rename('idx'), how='inner').iterrows()
        if isinstance(row['idx'], str)
    ]
    
    return pd.Series([v for ts, v in ts_v_pairs], index=[ts for ts, v in ts_v_pairs])

我觉得你需要dataframe lookup

v = s.dropna()
v[:] = df.to_numpy()[range(len(v)), df.columns.get_indexer_for(v)]