Pandas:与群体第一要素的区别

2024-10-03 13:29:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图计算组中元素和组中第一个元素之间的日期差。在

考虑以下pandas.DataFrame,按operation#type和{}分组:

                                    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
...        ...        ...            ...        ...   

我想插入一个持续时间列(整数),定义为

^{pr2}$

我做到这一点的唯一方法是使用非常慢的列表理解,它需要为每个步骤过滤数据帧,这是不可接受的。在

如何计算相同OPR_NUM内的卖出日期和买入日期之间的差异?在


Tags: 元素dataframepandasdateratetypebuy整数
1条回答
网友
1楼 · 发布于 2024-10-03 13:29:39

您可以使用.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如何处理数据类型存在一些问题;为了避免这些问题,我首先添加一个整数列,然后对该列进行转换,即使我不需要它的值。在

相关问题 更多 >