数据集
**Col1** **Col2** **Col3**
dog Z st02
dog,cat Z st02
dog,bat,cat Z st02
bat,cat,elephant Y st02
dog,bat,cat,elephant Y st02
tiger Z st01
pigeon Z st01
pigeon,parrot Z st01
dove,parrot Z st01
pigeon,parrot Z st01
pigeon,parrot,dove Z st01
lion,leopard,cheetah Z st01
tiger,lion,leopard,cheetah Z st01
dog,tiger,cheetah Y st01
dog,tiger,leopard,cheetah Y st01
eagle,jaguar,Kangaroo,zebra Z st02
cheetah,eagle,jaguar,Kangaroo,zebra Z st02
预期的输出是:
**Col1** **Col2** **Col3**
dog,bat,cat Z st02
dog,bat,cat,elephant Y st02
tiger,lion,leopard,cheetah Z st01
dog,tiger,leopard,cheetah Y st01
cheetah,eagle,jaguar,Kangaroo,zebra Z st02
pigeon,parrot,dove Z st01
为了提取上述行作为输出,我尝试跟踪模式并使用以下逻辑:
data = pd.read_excel("data.xlsx")
data['Col4'] = data['Col1'].str.count(',')
v1 = []
v2 = []
v1.append(0)
v2.append(0)
for i in range(0,data.shape[0]-1):
x = data['Col2'][i]
y = data['Col2'][i+1]
t1 = data['Col3'][i]
t2 = data['Col3'][i+1]
g1 = (x == y) & (t1==t2)
d1 = data['Col1'][i]
d2 = data['Col1'][i+1]
c1 = data['Col4'][i]
c2 = data['Col4'][i+1]
flag = 0
if(all(x in d2 for x in d1)):
flag = 1
g2 = (flag == 1)&(c2>c1)
v1.append(g1)
v2.append(g2)
data['new_cond1'] = v1
data['new_cond2'] = v2
data['Final_flag'] = (data['new_cond1']==True)&(data['new_cond2']==True)
data_output = data[data['Final_flag']==True]
但我最终没有得到预期的输出,输出中也有很少的额外行。有人可以帮我提取预期输出中提到的行。
从数据集中,我试图提取 1) 由逗号分隔的动物数量最多的行(或者在提到鸽子/鹦鹉/鸽子的地方考虑鸟类)。2) 不一定是每个 Col2 或 Col3 最多只能有一个动物数量,甚至可能有多个示例,如第 1 行的情况。1 和行号。5 在第 2 列和第 3 列中具有相同的值。这是因为第 1 行和第 1 行的动物类别不同。5. 希望清楚。
提前致谢!