Python 数据帧组中的列条件

Python 数据帧组中的列条件,python,pandas,Python,Pandas,我想创建一个新的df1,具有以下条件: 每组一组,红色和白色: 如果B组中存在C值,则取C=B的行。 如果B组中不存在C值,则取D=B的行。 我的意思是,新的df1应该是: A B C D 0 Red 10.0 11.5 12.0 1 Red 10.5 11.5 12.0 2 Red 11.0 11.5 12.0 3 Red 12.0 11.5 12.0 4 White 10.0 10.5 11.0 5

我想创建一个新的df1,具有以下条件:

每组一组,红色和白色:

如果B组中存在C值,则取C=B的行。 如果B组中不存在C值,则取D=B的行。 我的意思是,新的df1应该是:

       A     B     C     D
0    Red  10.0  11.5  12.0
1    Red  10.5  11.5  12.0
2    Red  11.0  11.5  12.0
3    Red  12.0  11.5  12.0
4  White  10.0  10.5  11.0
5  White  10.5  10.5  11.0
6  White  11.0  10.5  11.0
7  White  12.0  10.5  11.0
您可以使用with、then和作为默认顺序添加:


好啊如果我想用所选的值添加一个df[E]?[{A:Red,'B:12.00,C:11.50,D:12.00,E:12.00},{A:White,'B:10.50,C:10.50,D:11.00,E:10.50}]@Tie_24-问题是关于选择多个匹配项是否匹配。现在,因为pd.concat[df[m1],df[m2]].drop_重复项'A'首先使用m1的值,如果两者都匹配,则使用m2。因此,如果使用m3=df['B']==df['E'],pd.concat[df[m1],df[m2],df[m3]]。drop_复制'A',那么E的优先级最低,如果在所有条件下匹配,那么m2的优先级也较高,如m3
       A     B     C     D
3    Red  12.0  11.5  12.0
5  White  10.5  10.5  11.0
m1 = df['B'] == df['C']
m2 = df['B'] == df['D']
df = pd.concat([df[m1], df[m2]]).drop_duplicates('A').sort_index()
print (df)
       A     B     C     D
3    Red  12.0  11.5  12.0
5  White  10.5  10.5  11.0