如何从pandas DataFrame中的列中减去最小值

时间:2012-09-11 16:08:59

标签: python pandas

我想找到自第一次观察事件以来经过的时间。为此,我将每个观察结果保存在CSV文件中。每个事件都由唯一的哈希标识。

现在我正在做以下事情:

from pandas import *
from bz2 import BZ2File
events = DataFrame.from_csv(BZ2File('events.csv.bz2', 'r'), sep='\t', header=0, index_col=None)
m = events.groupby('hash')['timestamp'].min()

此时我有一个由哈希和第一次观察的时间戳索引的系列。 我如何使用它来获取事件DataFrame中每一行的时间偏移量(只是时间戳 - 最小值(时间戳))?

1 个答案:

答案 0 :(得分:1)

让我在这里设置一个玩具示例:

In [38]: rng = pd.date_range('2012-8-1', freq='T', periods=100)
In [39]: hashes = np.random.randint(0, 10, len(rng))
In [40]: obs = np.arange(len(rng))
In [41]: df = DataFrame({'hash' : hashes, 'timestamp' : rng.asobject},
   ....:                index=obs)

现在获取每个哈希的时差:

In [42]: grouped = df.set_index('hash', append=True).groupby(level='hash')

In [44]: grouped.transform(lambda x: x-x.min())
Out[44]:
        timestamp
   hash
0  3      0:00:00
1  5      0:00:00
2  1      0:00:00
3  8      0:00:00
4  6      0:00:00
5  8      0:02:00
6  1      0:04:00
7  7      0:00:00
8  3      0:08:00
9  5      0:08:00
10 8      0:07:00
11 1      0:09:00
12 2      0:00:00
...
...
...
94 2      1:22:00
95 6      1:31:00
96 1      1:34:00
97 0      1:21:00
98 8      1:35:00
99 0      1:23:00