有时候,当存在变量、列的数量较多,或者不同的 dataframe 中列的名称不完全一致等情况出现时,咱们不一定 会通过列名称来实现排序。
在此这里分享一个实战案例,基于aksare包的数据。
#首先导入数据开源金融数据库接口
#AKShare 是基于 Python 的开源金融数据接口库,目的是实现对股票、期货、期权、基金、债券、外汇等金融产品和另类数据从数据采集,
# 数据清洗到数据下载的工具,满足金融数据科学家、数据科学爱好者在数据获取方面的需求。
import pandas as pd
import akshare as ak
#获取年份数据
stock_sse_summary = ak.stock_sse_summary()
print(stock_sse_summary)
print(type(stock_sse_summary))
print('-------------')
years = ['2021','2022','2022']
def fund_stock_holding(years,code):
data = pd.DataFrame()
for yr in years:
df_tmp = ak.fund_portfolio_hold_em(code=code, year=yr)
data = data.append(df_tmp)
data['季度'] = data['季度'].apply(lambda x: x[:8])
data['占净值比例'] = pd.to_numeric(data['占净值比例'])
data = data.sort_values(['季度', '持仓市值'], ascending=[True, False])
df = data.set_index(['序号', '季度']).stack().unstack([1, 2]).head(10)
# df1.loc[:,(slice(None), [' 股 票 名 称 ',' 占 净 值 比 例 '])]
df = df.loc[:, (slice(None), '股票名称')]
df = df.droplevel(None, axis=1)
df.columns.name = None
df = df.reset_index()
# df.index.name = None
df['基金代码'] = code
return df
df = fund_stock_holding(years, '005669')
print(df)