У меня есть следующий формат данных в CSV-файле:
1,01,ABC,This is abc101,This is another abc101
1,01,DEF,This is def101,This is another def101
1,02,ABC,This is abc102,This is another abc102
1,02,DEF,This is def102,This is another def102
1,02,GHI,This is ghi102,This is another ghi102
2,01,ABC,This is abc201,This is another abc201
2,01,DEF,This is def201,This is another def201
2,01,GHI,This is ghi201,This is another ghi201
2,03,GHI,This is ghi203,This is another ghi203
3,02,ABC,This is abc302,This is another abc302
3,02,ABC,This is abc302,This is another abc302
3,02,ABC,This is abc302,This is another abc302
4,01,ABC,This is abc401,This is another abc401
4,01,DEF,This is def401,This is another def401
4,01,ABC,This is abc401,This is another abc401
4,02,DEF,This is def402,This is another def402
4,02,DEF,This is def402,This is another def402
также у меня есть список переменных = ['ABC','ABC_2','GHI','GHI_2']
список заголовков CSV-файлов = ['ID1','ID2','Var_name','var_value1','var_value2']
Мне нужно повернуть вышеуказанные данные, как показано ниже
[['ID1','ID2','ABC','ABC_2','GHI','GHI_2'], [1,01,'This is abc101','This is another abc101','',''], [1,02,'This is abc102','This is another abc102','This is ghi102','This is another ghi102']]
.. вот так
Если список переменных = ['GHI','GHI_2','ABC','ABC_2']
Выход будет:
[['ID1','ID2','GHI','GHI_2','ABC','ABC_2'], [1,01,'','','This is abc101','This is another abc101'], [1,02,'This is ghi102','This is another ghi102','This is abc102','This is another abc102']]
.. вот так
Это означает, что список должен:
- заполнить данные для всех идентификаторов
- создать пустую строку для тех переменных, которых нет в указанном выше наборе данных.
- Файл csv не имеет заголовка, у нас есть отдельный список заголовков
- заполнить вложенный список, сохраняя тот же порядок, что и список заголовков
- заполняет только те значения заголовка, т.е. список заголовков имеет только значения 'ABC', 'GHI', поэтому вложенный список должен заполнять только значения 'ABC' и 'GHI' и должен игнорировать строки 'DEF' из вышеуказанного набора данных .
- Для var_value2 он будет заполняться под позицией _2, например «Это другой abc101», будет под «ABC_2»
Я хочу сделать это в Python 2.7, возможно, используя Pandas.
variable_list = ['ABC','DEF']
df = pd.read_csv(csvfile,delimiter='#',engine='python',header=None)
df.columns = ['ID1','ID2','var_name','var_value']
f=df.set_index(['ID1','ID2','var_name'])['var_value'].unstack(fill_value='').fillna('')[variable_list].reset_index()
L1 = [f.columns.tolist()] + f.values.tolist()
Этот код я пробовал для одного var_value, теперь у меня есть два (var_value1, var_value2)