简体   繁体   English

根据 boolean 列乘以 pandas dataframe 行

[英]Multiplicate pandas dataframe rows according to boolean columns

Let's take this sample dataframe:让我们以 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

Each name can have 0, 1 or 2 categories (in my real dataframe, I have many more).每个名称可以有 0、1 或 2 个类别(在我的真实 dataframe 中,我还有更多)。 I would like to create a new dataframe having one row per name per category, converting the name value into name.cat.我想创建一个新的 dataframe 每个类别每个名称一行,将名称值转换为 name.cat。 I could go through a for loop but I know it is not the optimal way to do, especially since my real dataframe is big.我可以通过 for 循环 go 但我知道这不是最佳方法,特别是因为我真正的 dataframe 很大。 Do you know please a good way to proceed?你知道请一个好方法吗?

Expected output:预期 output:

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

Try:尝试:

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)

Prints:印刷:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM