简单问题:
In [1]:
df = DataFrame({'value':[4,4,4],'unit':['D','W','Y']})
df
Out[1]:
unit value
0 D 4
1 W 4
2 Y 4
我可以通过这种方式创建时间增量(当然):
In [2]:
timedelta64(4, 'D')
Out[2]:
numpy.timedelta64(4,'D')
但是我无法迭代 DataFrame 列来获取具有时间增量的结果系列:
def f(x):
return timedelta64(x['value'], x['unit'])
df.apply(f, axis=1)
相反,我得到:
TypeError: don't know how to convert scalar number to float
编辑:
这也不起作用,并返回相同的错误:
df['arg'] = zip(df.value, df.unit)
df.arg.apply(lambda x: timedelta64(x[0], x[1]))
最佳答案
所以你的代码对我有用。
df = pd.DataFrame({'value':[4,4,4],'unit':['D','W','Y']})
df.apply(f, axis=1)
0 4 days
1 4 weeks
2 4 years
dtype: object
这是我的版本:
numpy.__version__
'1.8.0'
pandas.__version__
'0.13.0rc1-32-g81053f9'
我确实注意到一个可能与您的问题相关的错误。您可以检查是否有 numpy 1.7,如果有,请升级到 1.8,看看是否可以解决问题。祝你好运:)
关于python - 使用 2 个 pandas 列作为 np.timedelta 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21035837/