使用计数旋转数据以了解数据框中是否存在行
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
我有一个数据框,其中许多行属于一个实体但被一个场景分割。 例如:
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