我有一个由三列(DataFramedateTicker)分组的多重索引Security Description

df.groupby(['date','Ticker', 'Security Description']).sum()


接下来,我要计算今天(在示例中为2020-01-02)与昨天之间的差异,或者如果缺少昨天,则为昨天之前的最近日期,其中同时包含代码和安全说明的数据。

这是我正在使用的示例数据:

df = {'transactionID': {0: 5, 1: 7, 2: 5, 3: 7, 4: 6, 5: 6},
 'date': {0: '1/1/2020',
  1: '1/1/2020',
  2: '1/2/2020',
  3: '1/2/2020',
  4: '12/31/2019',
  5: '1/2/2020'},
 'Dollar Gain': {0: 500, 1: 100, 2: -200, 3: -200, 4: -50, 5: 50},
 'Date': {0: '4/24/2018',
  1: '4/24/2018',
  2: '4/24/2018',
  3: '4/24/2018',
  4: '5/24/2019',
  5: '5/24/2019'},
 'Notional': {0: 5, 1: 10, 2: 5, 3: 10, 4: 1, 5: -1},
 'Ticker': {0: 'AAPL', 1: 'MCD', 2: 'AAPL', 3: 'MCD', 4: 'SBUX', 5: 'SBUX'},
 'Security Description': {0: 'AAPL Equity',
  1: 'MCD Equity',
  2: 'AAPL Equity',
  3: 'MCD Equity',
  4: 'SBUX Equity',
  5: 'SBUX Equity'},
 'Price': {0: 100.0, 1: 80.0, 2: 105.5, 3: 105.5, 4: 80.0, 5: 80.0}}
df = pd.DataFrame(df)

df.set_index('date', 'Ticker')
df.groupby(['date','Ticker', 'Security Description']).sum()


python - 多索引 Pandas 数据框中两个不同日期的分组总和之间的差异-LMLPHP

以下是我想要的股票行情输出。


2020年1月2日AAPL股票的美元收益为-200。 2020年1月1日AAPL股票代码美元收益为500。那时的差值为-700。
对于SBUX,由于在1/1/2020上没有条目,所以使用了12/31/2019(1/1/2020之前的最近日期)中的值,因此50-(-50)= 100。


python - 多索引 Pandas 数据框中两个不同日期的分组总和之间的差异-LMLPHP

编辑

除了能够处理昨天(以前的观察)之外,您还将如何概括该解决方案以在“月迄今”,“年末迄今”以及任何两个自定义日期之间工作?

最佳答案

使用diff修复代码

g=df.groupby(['date','Ticker', 'Security Description']).sum()
ydf=g.groupby(level=1).apply(lambda x : x.diff().sum())
Out[35]:
        transactionID  Dollar Gain  Notional  Price
Ticker
AAPL              0.0       -700.0       0.0    5.5
MCD               0.0       -300.0       0.0   25.5
SBUX              0.0       -100.0       2.0    0.0

关于python - 多索引 Pandas 数据框中两个不同日期的分组总和之间的差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59567623/

10-12 21:38