2017-02-20 12 views
1

У меня есть dataframe вроде этого:правопреемником кортеж клеток в панд

date time job.filename job.id 1,3,5-trimethylbenzene 1,3-butadiene 1,4-diaminobutane 1,5-diaminopentane 1,5-pentanedial 1-butanamine ... nitrosopiperidine nitrosopyrrolidine pentanal propanal propylbenzene propylene glycol methyl ether acetate styrene tetrahydropyrrole toluene xylenes + ethylbenzene 
0 20161214 75506 IMAT list 1-3581-0-20161214-075506.csv 3581 NaN 0.1914 NaN NaN NaN NaN ... 0.5742 NaN NaN NaN NaN NaN NaN 0.3631 NaN NaN 
1 20161214 80856 IMAT list 1-3585-0-20161214-080856.csv 3585 NaN 0.2353 NaN NaN NaN NaN ... 12.8760 NaN NaN NaN NaN NaN NaN 1.0447 NaN NaN 

Я хотел бы, чтобы назначить время для каждого значения и кортежа:

date time job.filename job.id 1,3,5-trimethylbenzene 1,3-butadiene 1,4-diaminobutane 1,5-diaminopentane 1,5-pentanedial 1-butanamine ... nitrosopiperidine nitrosopyrrolidine pentanal propanal propylbenzene propylene glycol methyl ether acetate styrene tetrahydropyrrole toluene xylenes + ethylbenzene 
0 20161214 75506 IMAT list 1-3581-0-20161214-075506.csv 3581 NaN (0.1914,75506) NaN NaN NaN NaN ... (0.5742,75506) NaN NaN NaN NaN NaN NaN (0.3631,75506) NaN NaN 
1 20161214 80856 IMAT list 1-3585-0-20161214-080856.csv 3585 NaN (0.2353,80856) NaN NaN NaN NaN ... 12.8760 NaN NaN NaN NaN NaN NaN 1.0447 NaN NaN 

Я попытался

headers=new.columns.tolist() 
for i, row in new.iterrows(): 
    val=row[headers[4:]].get_values() 
    time=row['time'] 
    k=[(value,time) for value in val] 
    new.set_value(i,headers[4:],k) 

но я получаю это ValueError: Должны иметь одинаковые ключи и значение len при настройке с помощью ndarray

Возможно, из-за того, что формат меняется. Могу ли я изменить формат своей серии, чтобы сделать эту работу?

Приветствие

ответ

1

Там нет необходимости в явную итерацию я не думаю, - вы сразу можете заархивировать время на колонны значения индексирования с df.apply. В качестве примера,

>>> df 
    time vals1 vals2   vals3 
0 332903 foo  4 <class 'int'> 
1 42930 bar  3 <class 'str'> 

>>> df.iloc[:, 1:] = df.iloc[:,1:].apply(lambda x: list(zip(df.time, x))) 

>>> df 
    time   vals1  vals2     vals3 
0 332903 (332903, foo) (332903, 4) (332903, <class 'int'>) 
1 42930 (42930, bar) (42930, 3) (42930, <class 'str'>) 
Смежные вопросы