我有一个熊猫数据框,其中包含股票交易,这种交易并非每天都会发生,而且并非每天都有:

目标是获取每天每只股票的(每日)权重。

Starting table and expected result

这表示
-创建完整的日期日历
-在每个日期重复每只股票的累积股份
-并最终计算出该日期的权重

somone可以帮助我吗?我已经在搜索多个线程,但是找不到任何有效的解决方案。

最佳答案

谢谢你的问题。由于要构建用于投资的数据框,因此我在此代码上花了点功夫,所以这是个好习惯。试试看,我认为它可以满足您的要求。

import pandas as pd
import datetime

# create df
trades = pd.DataFrame(index=['2011-02-16', '2011-02-16', '2011-02-17', '2014-03-20','2014-03-20', '2018-01-04'])

# build data
trades['stock'] = ['A', 'B', 'A', 'B', 'C', 'B']
trades['shares_Tr'] = [5,10,5,10,15,-20]

# create a range of dates for the balance dataframe
index_of_dates = pd.date_range(('2011-02-10'), ('2018-01-05')).tolist()

# create a balance dataframe with columns for each stock.
bal = pd.DataFrame(data = 0, index=index_of_dates, columns=['A', 'A_sum', 'A_weight', 'B', 'B_sum', 'B_weight',  'C', 'C_sum', 'C_weight', 'Total' ])

# populate the trades from trades df to the balance df.
for index, row in trades.iterrows():
    bal.loc[index, row['stock']] = row['shares_Tr']

# track totals
bal['A_sum'] = bal['A'].cumsum()
bal['B_sum'] = bal['B'].cumsum()
bal['C_sum'] = bal['C'].cumsum()
bal['Total'] = bal.iloc[:,[1,4,7]].sum(axis=1)
bal['A_weight'] = bal['A_sum'] / bal['Total']
bal['B_weight'] = bal['B_sum'] / bal['Total']
bal['C_weight'] = bal['C_sum'] / bal['Total']


您将有两个数据框,一个称为交易,另一个称为bal,用于保存结果。

关于python - Pandas 数据框中每天每种类别的运行总计,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54451488/

10-12 14:25