基于 pandas DataFrame 中所有列的值的最小行数条件

问题描述 投票:0回答:1

假设我在 pandas DataFrame 中有三列,没有任何 null 或空值。

  • 设施的每件物品始终具有独特的价值。
  • 一个项目可以有一个或多个与其关联的供应商。
  • 同一供应商可以针对给定商品的不同设施多次出现。
  • 对于某一特定项目,一个设施绝不会与多个供应商相关联。
  • 项目值已排序。
  • 每一行都是独一无二的。

数据示例:

专栏供应商 栏目 色谱柱设施
V1 I1 F1
V1 I1 F2
V2 I1 F4
V1 I2 F1
V1 I2 F2
V2 I2 F3
V3 I2 F5
V3 I2 F6
V3 I3 F3
V1 I4 F2
V4 I4 F4
V4 I4 F5
V1 I5 F1
V1 I5 F4

如何创建包含以下内容的 DataFrame?:“对于每个项目,如果有多个供应商与该项目关联,请为我提供该项目的所有行(否则排除与该项目关联的所有行)。”

在此示例中,我想要 I1、I2 和 I4 的所有行的 DataFrame,因为它们有多个与其关联的唯一供应商,并且我将排除涉及 I3 和 I5 的所有行,因为只有一个供应商与它们关联他们。

我尝试为每个项目循环创建一个唯一供应商列表,条件为

len(Appended_Vendor_List_var) > 1
,但到目前为止还没有成功。

python pandas dataframe conditional-statements
1个回答
0
投票

这可能就是您正在寻找的:

import pandas as pd

df = pd.DataFrame(
    [
        ["V1", "I1", "F1"],
        ["V1", "I1", "F2"],
        ["V2", "I1", "F4"],
        ["V1", "I2", "F1"],
        ["V1", "I2", "F2"],
        ["V2", "I2", "F3"],
        ["V3", "I2", "F5"],
        ["V3", "I2", "F6"],
        ["V3", "I3", "F3"],
        ["V1", "I4", "F2"],
        ["V4", "I4", "F4"],
        ["V4", "I4", "F5"],
        ["V1", "I5", "F1"],
        ["V1", "I5", "F4"],
    ],
    columns=["Column Vendor", "Column Item", "Column Facility"],
)

df = df.join(
    df.groupby("Column Item").count()["Column Vendor"].rename("Multiple Vendors") > 1,
    on="Column Item",
)
df = df[df["Multiple Vendors"]].drop(columns="Multiple Vendors")
© www.soinside.com 2019 - 2024. All rights reserved.