我有一个这样的数据框:
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:使用ndarray
设置时必须具有相等的len键和值可能是由于格式改变的事实。我可以修改我的系列格式以使其工作吗?
干杯
答案 0 :(得分:2)
我不需要显式迭代 - 您可以直接将时间压缩到使用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'>)