根据布尔列乘以熊猫数据框行

时间:2021-05-30 18:57:39

标签: python pandas dataframe

让我们以这个示例数据帧为例:

df=pd.DataFrame({'Name':['A','B','C','D'], 'NoMatter':[1,2,3,4], 'Cat1':[0,1,1,0], 'Cat2':[1,1,0,0]})
  Name  NoMatter  Cat1  Cat2
0    A         1     0     1
1    B         2     1     1
2    C         3     1     0
3    D         4     0     0

每个名称可以有 0、1 或 2 个类别(在我的真实数据框中,我有更多)。我想创建一个新的数据框,每个类别的每个名称都有一行,将名称值转换为 name.cat。我可以通过 for 循环,但我知道这不是最佳方法,尤其是因为我的真实数据框很大。你知道一个好的方法吗?

预期输出:

     Name  NoMatter
0  A.Cat2         1
1  B.Cat1         2
2  B.Cat2         2
3  C.Cat1         3

1 个答案:

答案 0 :(得分:3)

试试:

df = df.melt(["Name", "NoMatter"])
df = df[df.value > 0]
df.Name = df.Name + "." + df.variable
df = df[["Name", "NoMatter"]].sort_values(by="Name").reset_index(drop=True)
print(df)

打印:

     Name  NoMatter
0  A.Cat2         1
1  B.Cat1         2
2  B.Cat2         2
3  C.Cat1         3