python - 根据所有列值在 pandas 中选择一行

标签 python pandas dataframe indexing

我想在 pandas 框架内找到特定行(给定其所有列值)。 到目前为止我的尝试:


df = pd.DataFrame(
    columns = ["A", "B", "C"],
    data = [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9],
        [10, 11, 12],
        ])

# row to find (last one)
row = {"A" : 10, "B" : 11, "C" : 12}

# chain
idx = df[(df["A"] == 10) & (df["B"] == 11) & (df["B"] == 11)].index[0]
print(idx)

# iterative
mask = pd.Series([True] * len(df))

for k, v in row.items():
    mask &= (df[k] == v)

idx = df[mask].index[0]
print(idx)

# pandas series
for idx in df.index:
    print(idx,  (df.iloc[idx,:] == pd.Series(row)).all())

有更简单的方法吗?类似于 idx = df.find(row) 的东西?

通常需要此功能,例如在时间序列中定位一个特定样本。我不敢相信没有直接的方法可以做到这一点。

最佳答案

你只是想要吗?

df[df.eq(row).all(axis=1)] #.index # if the indices are needed

输出:

    A   B   C
3  10  11  12

或者,如果您有更多列并且想要忽略它们进行比较:

df[df[list(row)].eq(row).all(axis=1)]

关于python - 根据所有列值在 pandas 中选择一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72612597/

相关文章:

python - 多处理中的共享内存

python - 如何在不使用 Pandas 的情况下将 Numpy 转换为 Parquet?

Python数据框: Add element to multiple cells with condition

python - 填充前一列 pandas python 中的空白单元格

python - 如何按日期列表过滤日期和时间的数据框?

python - 如何从 Python 获取失败服务的 systemctl 结果?

python - 如何将时间戳列分组为每小时并聚合 pandas 数据框中的行

python - 用间隔之间的每日值填充索引

function - 自定义函数中存储的值

python jira 不通过pip升级