Mam dataframe, w którym mam wiele nazw kolumn nóg, takich jak leg/1 leg/2 leg/3 do nogi / 24, ale problem polega na tym, że każda noga ma wiele łańcucha dołączonych do {x1}}.

Na przykład mam taką datafram

leg/1/a1 leg/1/a2  leg/2/a1   leg/3/a2

Potrzebuję, aby wszystkie nazwy nóg w dataframe powinny mieć równe kolumny, takie jak noga / 1

Na przykład moje wymagane nazwy kolumn pandas dataframe powinny być

leg/1/a1 leg/1/a2  leg/2/a1  leg/2/a2   leg/3/a1   leg/3/a2

Powinno to być wyjście Dataframe.

W tym celu pierwszy zebrałem nogę / 1 szczegóły wewnątrz listy

legs=['leg/1/a1','leg/1/a2']

Ta lista, którą stworzyłem, aby dopasować wszystkie nazwy kolumn Dataframe

Po tym zebrałem wszystkie nazwy kolumn danych Dataframe, które zostały uruchomione z nogą

cols = [col for col in df.columns if 'leg' in col]

Ale problem polega na tym, że nie jestem w stanie dopasować, wszelka pomoc byłaby doceniana.

0
Tayyab Gulsher Vohra 21 listopad 2020, 12:27

1 odpowiedź

Najlepsza odpowiedź
column_list = ['leg/1/a1','leg/1/a2','leg/2/a1','leg/3/a2'] #replace with df.columns
col_end_list = set([e.split('/')[-1] for e in column_list]) # get all a1,a2,....an
#Loop theough leg/1/a1 to leg/24/an
for i in range(1,25):
    for c in col_end_list:
        check_str = 'leg/'+str(i)+'/'+c
        if check_str not in column_list: #Check if column doesn't exist ad a column
            df[check_str] = 0 #adding new column
        

Kod do preproduce na pustym df

import pandas as pd
df = pd.DataFrame([],columns=['leg/1/a1','leg/1/a2','leg/2/a1','leg/3/a2'])
column_list = df.columns
col_end_list = set([e.split('/')[-1] for e in column_list]) # get all a1,a2,....an
#Loop theough leg/1/a1 to leg/24/an
for i in range(1,25):
    for c in col_end_list:
        check_str = 'leg/'+str(i)+'/'+c
        if check_str not in column_list: #Check if column doesn't exist ad a column
            df[check_str] = 0 #adding new column
>>> df.columns
>>> Index(['leg/1/a1', 'leg/1/a2', 'leg/2/a1', 'leg/3/a2', 'leg/2/a2', 'leg/3/a1',
   'leg/4/a1', 'leg/4/a2', 'leg/5/a1', 'leg/5/a2', 'leg/6/a1', 'leg/6/a2',
   'leg/7/a1', 'leg/7/a2', 'leg/8/a1', 'leg/8/a2', 'leg/9/a1', 'leg/9/a2',
   'leg/10/a1', 'leg/10/a2', 'leg/11/a1', 'leg/11/a2', 'leg/12/a1',
   'leg/12/a2', 'leg/13/a1', 'leg/13/a2', 'leg/14/a1', 'leg/14/a2',
   'leg/15/a1', 'leg/15/a2', 'leg/16/a1', 'leg/16/a2', 'leg/17/a1',
   'leg/17/a2', 'leg/18/a1', 'leg/18/a2', 'leg/19/a1', 'leg/19/a2',
   'leg/20/a1', 'leg/20/a2', 'leg/21/a1', 'leg/21/a2', 'leg/22/a1',
   'leg/22/a2', 'leg/23/a1', 'leg/23/a2', 'leg/24/a1', 'leg/24/a2'],
  dtype='object')
0
venky__ 21 listopad 2020, 10:12