python - Pandas :与组中第一个元素的差异

标签 python numpy pandas

我正在尝试计算组中的元素与组中的第一个元素之间的日期差异。

考虑以下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/

相关文章:

python - Pandas DataFrame 中连续的 NaN 大于阈值

python - 当索引不对齐时,pandas DataFrame 更新/合并

python - 模糊正则表达式 : fuzzy count for substitution is always 1

python - 发电机B : How to update sort key?

python - 如果字符串不等于值则删除行 - Pandas

python - 如何在OpenCV中找到两个轮廓之间的最近点

python - 从头开始Python中的K表示

python - 从 numpy 数组获取索引并应用于第二个低维数组以创建新数组

python - 如何加快读取多个文件并将数据放入数据框中?

python - 选择要从 Excel 读入 pandas 数据框的行号