Изучение и поиск закономерностей / сходства в данных с Python - PullRequest
0 голосов
/ 08 марта 2020

, когда я учился Python, работал над одним из наборов данных следующим образом:

**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          

Для того, чтобы извлечь вышеуказанное В качестве выходных данных я попытался отследить шаблоны и использовать приведенную ниже логику c:

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 и строка № 5 с одинаковым значением в столбце 2 и столбце 3. Это связано с тем, что категория животных отличается в ряду № 1 и ряду № 5. Надеюсь, что все ясно.

Заранее спасибо!

1 Ответ

0 голосов
/ 09 марта 2020

Мой комментарий плохо отформатирован, поэтому я опубликую ответ, чтобы сделать его более читабельным. Я знаю, что это не ваш желаемый вывод, но он не дублирует строки.

#assuming your data is currently in a frame called df...
df_reduce = df.copy()
df_reduce = df_reduce.groupby(['**Col2**','**Col3**'])['**Col1**'].apply(','.join).reset_index()
for index, row in df_reduce.iterrows():
    animals = row['**Col1**'].split(',')
    animals = set(animals)
    row['**Col1**'] = str(animals)[1:-1]
print(df_reduce)

Вывод:

  **Col2** **Col3**                                           **Col1**
0        Y     st01               'tiger', 'leopard', 'cheetah', 'dog'
1        Y     st02                    'bat', 'cat', 'elephant', 'dog'
2        Z     st01  'parrot', 'pigeon', 'tiger', 'lion', 'leopard'...
3        Z     st02  'zebra', 'Kangaroo', 'dog', 'eagle', 'cheetah'...
...