我有以下内容,pandas.DataFrame
并想计算出一个新列,其中包含多索引级别中连续时间戳之间的timedelta Timestamp
:
import pandas as pd
import numpy as np
data = {'Timestamp': [12, 12, 12, 22, 22, 22, 44, 44, 66, 102],
'Customer': ['bmw', 'vw', 'vw', 'bmw', 'vw', 'vw', 'vw', 'vw', 'bmw', 'bmw'],
'Series': ['series1', 'series1', 'series2', 'series1', 'series1', 'series2', 'series1', 'series2', 'series2', 'series1'],
'time_delta': [np.nan, np.nan, np.nan, 10, 10, 10, 22, 22, 22, 36]
}
df = pd.DataFrame(data).set_index(['Timestamp', 'Customer', 'Series'])
该列time_delta
是我想要实现的期望输出。我有点挣扎,因为我不能使用pandas.Series.diff()
函数,因为periods
不一致。我想Timestamp
在数据帧的级别上执行时间戳增量计算,但是将结果传递给该级别的所有行。因此,对于第一Timestamp
级值12,没有前面的时间戳值,因此该时间戳的所有行都用填充np.nan
。对于下一个时间戳记22,我可以将增量增加到12(即10),并为时间戳记22的所有行填充它。
让我们尝试提取级别值并从那里计算差值:
df['time_delta'] = df.index.get_level_values('Timestamp')
s = df['time_delta'].diff()
df['time_delta'] = s.where(s>0).ffill()
输出:
time_delta
Timestamp Customer Series
12 bmw series1 NaN
vw series1 NaN
series2 NaN
22 bmw series1 10.0
vw series1 10.0
series2 10.0
44 vw series1 22.0
series2 22.0
66 bmw series2 22.0
102 bmw series1 36.0
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句