我有一个像这样的数据框:
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键和值
可能是由于格式更改这一事实。我可以修改我的系列格式以使其工作吗?
干杯
最佳答案
我认为不需要显式迭代-您可以直接将时间压缩到使用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'>)
关于python - 将元组分配给 Pandas 中的单元格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42355454/