使用计数旋转数据以了解数据框中是否存在行

Pivoting data to understand if row exists in dataframe using count

我有一个数据框,其中许多行属于一个实体但被一个场景分割。 例如:

df = pd.DataFrame({"Entity":['AAA', 'AAA, 'AAA, 'BBB','BBB', 'CCC'],
                "Scenario":['x', 'y', 'z', 'y', 'z', 'x'],
                "val_2018":[100, 200, 100, 0, 3, 40],
                "val_2019":[150, 150, 120, 0, 0, 60]})

我想要一个数据框,显示一行中的每个实体是否存在场景。 所以上面的输出将是:

Entity    x    y    z
AAA    True   True   True
BBB    False  True   True
CCC    True   False  False

或者代替布尔值 T/F - 1 和 0 会更好 - 本质上是一个计数。

到目前为止我已经尝试过:

table = pd.pivot_table(data=df, columns=["Scenario"], index="Entity", aggfunc='count', fill_value=0)

虽然它几乎可以满足我的要求,但它会重复每隔一列的值 - 就像一个多索引。所以 val_2018 和 val_2019 重复了这个场景。

不幸的是,我不能只删除这些,因为我还有许多其他列在上面的示例中没有指定。

有谁知道我怎样才能简洁地做到这一点?

尝试 pd.crosstab:

print(pd.crosstab(df["Entity"], df["Scenario"]))

打印:

Scenario  x  y  z
Entity           
AAA       1  1  1
BBB       0  1  1
CCC       1  0  0