我正在尝试计算组中的元素与组中的第一个元素之间的日期差异。
考虑以下pandas.DataFrame
,按操作#
、类型
和日期
分组:
RATE AMT
OPR TYPE DATE RET
232 BUY 2012-02-16 1.005 3000023.02
SELL 2012-07-02 1.005 3000023.02
235 BUY 2012-02-28 1.005 9900008.03
SELL 2012-07-26 1.005 9900008.03
251 BUY 2012-01-13 0.990 5000000.00
SELL 2012-04-11 0.990 200000.98
2012-04-20 0.990 300000.98
2012-04-26 0.990 700000.00
2012-08-17 0.990 100000.98
... ... ... ... ...
我想插入一个持续时间列(整数),定义为
Duration = Sell_Date - Buy_Date .
我设法做到这一点的唯一方法是使用非常慢的列表理解,需要过滤每个步骤的数据帧,这是 Not Acceptable 。
如何计算同一 OPR_NUM 内的卖出日期和买入日期之间的差异?
最佳答案
您可以使用.groupby
,然后使用.transform
:
>>> def tranf(obj):
... date_ret = obj.index.get_level_values('DATE RET')
... return (date_ret - date_ret[0]).days
...
>>> df['DURATION'] = np.zeros(len(df), dtype='int64')
>>> df['DURATION'] = df.groupby(level='OPR')['DURATION'].transform(tranf)
>>> df
RATE AMT DURATION
OPR TYPE DATE RET
232 BUY 2012-02-16 1.005 3000023.02 0
SELL 2012-07-02 1.005 3000023.02 137
235 BUY 2012-02-28 1.005 9900008.03 0
SELL 2012-07-26 1.005 9900008.03 149
251 BUY 2012-01-13 0.990 5000000.00 0
SELL 2012-04-11 0.990 200000.98 89
2012-04-20 0.990 300000.98 98
2012-04-26 0.990 700000.00 104
2012-08-17 0.990 100000.98 217
.transform
处理数据类型的方式存在一些问题;为了避免这些问题,我首先添加一个整数列,然后对该列进行转换,即使我不需要它的值。
关于python - Pandas :与组中第一个元素的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27443111/