gpt4 book ai didi

python - Pandas 通过事件创建月末持有量

转载 作者:行者123 更新时间:2023-12-01 09:29:46 24 4
gpt4 key购买 nike

我正在尝试根据 df_td 事件列表中的“问题”查找月末余额。

实际上,我只是想找到每个月末余额为正的“问题”的数量。

为此,我需要根据月末日期之前的事件的每个“问题”、“操作”和“份额”创建月末余额。因此,每个期间余额 > 0 的问题总数。

“action”用于判断是买入还是卖出,“+”还是“-”。因此,每个“发行”的余额为“+ 股”减去“- 股”。

以前我使用 sql 来执行此操作,但这似乎是一种严重的浪费。

使用 Pandas 执行此操作的最佳方法是什么?

df_td

   action code     comm    credit        date  \
0 + P 0.00 0.00 2013-03-27
1 + P 0.00 0.00 2013-03-27
2 - S 19.00 86751.01 2013-04-08
3 + Z 2000.00 0.00 2013-04-09
4 - S 18.71 730.49 2013-04-10

issue \
FIDELITY REAL ESTATE INVESTMENT PORTFOLIO FUND
FIDELITY NJ MUNICIPAL INCOME FUND
FIDELITY REAL ESTATE INVESTMENT PORTFOLIO FUND
AMERICAN RLTY CAP HEALTHCARE TR INC
FIDELITY NJ MUNICIPAL INCOME FUND

price shares
0 34.4800 2462.958
1 0.2003 60.963
2 35.2300 2462.958
3 10.0000 2000.000
4 12.2900 60.960

以 df_month 结束的月份示例

        month
0 2013-03-31
1 2013-04-30
2 2013-05-31
3 2013-06-30
4 2013-07-31

当我循环几个月时,我如何获得 df_td 中每个问题的“平衡”?

我希望这是有道理的?

谢谢。

最佳答案

检查以下代码是否满足您的需求:

def get_balance(x):
return x.comm + x.credit + x.price*x.shares*(1 if x.action == '+' else -1)

df['balance'] = df.apply(get_balance, axis=1)
df.query('balance>0').set_index('date').resample('M').agg({'issue': 'nunique', 'balance': np.sum})

* 注意*

  1. 确保您的日期字段采用正确的格式(即 datetime64[ns])

    df['date'] = pd.to_datetime(df['date'], format="%Y-%m-%d")

  2. 如果问题的总余额是问题所在,您可以将 .query('balance>0') 移动到链的末尾。

测试:Python 3.6.4 + Pandas 0.22.0

关于python - Pandas 通过事件创建月末持有量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50072394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com