我正在尝试根据活动df_td列表中的“问题”查找月末余额。
实际上,我只是想查找每个月末余额为正的“问题”计数。
为此,我需要根据少于月末日期的活动中的每个“问题”,“操作”和“份额”创建月末余额。因此,每个期间的总余额> 0。
“动作”用于知道它是买还是卖,“ +”或“-”。因此,每个“问题”的余额为“ +份额”减去“-份额”。
以前,我使用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})
* 注意 *
确保您的
date
字段格式正确(即datetime64 [ns])df ['date'] = pd.to_datetime(df ['date'],format =“%Y-%m-%d”)
如果您担心问题的总余额,可以将
.query('balance>0')
移到链的末尾。已测试:Python 3.6.4 + Pandas 0.22.0
关于python - Pandas 通过事件创建月末持有量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50072394/