转自 qcyfred
一天的交易结束后,根据交易流水,要生成持仓汇总。
所以推荐使用py的聚合函数,groupby。
案例代码演示是这样的。
import pandas as pd
1
df = pd.read_excel('trade.xlsx')
1
df
1
证券代码 证券名称 买卖方向 数量
0 601318 中国平安 买入 100
1 601398 工商银行 买入 100
2 600050 中国联通 买入 100
3 601318 中国平安 卖出 100
4 601318 中国平安 买入 200
5 600050 中国联通 买入 100
6 600050 工商银行 卖出 100
df_grp = df.groupby(['证券代码', '买卖方向']).sum()
1
df_grp
1
数量
证券代码 买卖方向
600050 买入 200
卖出 100
601318 买入 300
卖出 100
601398 买入 100
tmp_df = df.copy()
tmp_df.index = [df['证券代码'], df['买卖方向']]
tmp_df
1
2
3
证券代码 证券名称 买卖方向 数量
证券代码 买卖方向
601318 买入 601318 中国平安 买入 100
601398 买入 601398 工商银行 买入 100
600050 买入 600050 中国联通 买入 100
601318 卖出 601318 中国平安 卖出 100
买入 601318 中国平安 买入 200
600050 买入 600050 中国联通 买入 100
卖出 600050 工商银行 卖出 100
tmp_df.drop_duplicates(['证券代码','买卖方向'], inplace=True)
tmp_df
1
2
证券代码 证券名称 买卖方向 数量
证券代码 买卖方向
601318 买入 601318 中国平安 买入 100
601398 买入 601398 工商银行 买入 100
600050 买入 600050 中国联通 买入 100
601318 卖出 601318 中国平安 卖出 100
600050 卖出 600050 工商银行 卖出 100
other_cols = list(set(tmp_df.columns) - set(df_grp.columns))
df_sum = pd.concat([df_grp, tmp_df.loc[:, other_cols]], axis=1)
1
2
df_sum
1
数量 证券名称 证券代码 买卖方向
证券代码 买卖方向
600050 买入 200 中国联通 600050 买入
卖出 100 工商银行 600050 卖出
601318 买入 300 中国平安 601318 买入
卖出 100 中国平安 601318 卖出
601398 买入 100 工商银行 601398 买入
上面的案例,py代码在附在下面。
# coding: utf-8
import pandas as pd
df = pd.read_excel('trade.xlsx')
df_grp = df.groupby(['证券代码', '买卖方向']).sum()
tmp_df = df.copy()
tmp_df.index = [df['证券代码'], df['买卖方向']]
tmp_df.drop_duplicates(['证券代码','买卖方向'], inplace=True)
other_cols = list(set(tmp_df.columns) - set(df_grp.columns))
df_sum = pd.concat([df_grp, tmp_df.loc[:, other_cols]], axis=1)
————————————————
版权声明:本文为CSDN博主「qcyfred」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qcyfred/article/details/78785792