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)]
假设我们有一个 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)]