python - 如何根据 MultiIndex DataFrame 的条件删除 1 级索引
问题描述
我的目标是根据交易量减少两只股票/股票代码(或底部十分位)(针对每个 0 级指数日期的交易量最低的 2 只股票/股票代码(第 1 级)删除整行)
DataFrame 已经按体积排序,因此对于每个日期,它按体积升序排序。所以 DataFrame 可能看起来像(已缩短为 5 个股票而不是 20 个): DataFrame 示例:'''
Date Ticker col1 col2 col3 Volume
2020-01-01 stock1 - - - 5
stock2 - - - 10
stock3 - - - 20
stock4 - - - 40
stock5 - - - 43
2020-02-01 stock3 - - - 7
stock5 - - - 14
stock1 - - - 33
stock2 - - - 50
stock4 - - - 52
对于 0 级索引日期“2020-01-01”,我想删除 stock1 和 stock2,但对于下一级索引日期“2020-02-01”,我想删除新的最低 2,即 stock3 和 stock5。
注意:真正的 DataFrame 会比 5 只以上的股票大得多,而且还会持续很多个月
到目前为止,我已经尝试添加一个十分位列(因为我的真正目标是为 20 只股票执行此操作),使用qcut
, 这将自动为我提供按数量计算的最低两个值,但我无法为每个 0 级日期复制(仅在一个日期成功,并且不确定如何为每个 0 级日期执行此操作)。
由于这是一个 DataFrame,我也尝试过nsmallest
但遇到了错误。nlargest
你对我如何完成这项任务有什么建议吗?我觉得好像我走在正确的道路上,但我缺少一些基本的东西。任何见解表示赞赏!
解决方案
由于您的 DataFrame 已经按日期和数量排序,您可以通过调整Python 的任何答案来删除每个日期组的前 2 行:Pandas - Delete the first row by group。例如:
# Create input data based on your example
d = {'Date': 5 * ['2020-01-01'] +
5 * ['2020-02-01'],
'Ticker': ['stock1', 'stock2', 'stock3', 'stock4', 'stock5',
'stock3', 'stock5', 'stock1', 'stock2', 'stock4'],
'col1': 10 * ['-'],
'Volume': [5, 10, 20, 40, 43, 7, 14, 33, 50, 52]}
df = pd.DataFrame(d)
# Get the first and second rows of each date group
to_del = df.groupby('Date', as_index=False).nth([0, 1])
# Intentionally duplicate the first and second rows of each date
# group, then remove them with drop_duplicates with keep=False to
# drop *all* duplicated rows without keeping first occurrences
res = pd.concat([df, to_del]).drop_duplicates(keep=False)
print(res)
Date Ticker col1 Volume
2 2020-01-01 stock3 - 20
3 2020-01-01 stock4 - 40
4 2020-01-01 stock5 - 43
7 2020-02-01 stock1 - 33
8 2020-02-01 stock2 - 50
9 2020-02-01 stock4 - 52
推荐阅读
- python - 如何在 Pandas Dataframe 中的所有值中进行 value_counts
- angular - 材质树父节点未按预期工作
- python - 从配置文件配置 Python 自定义记录器,而不配置根记录器
- javascript - 如何发送正确的模型
- database - 如何减少从数据库发送的数据的大小?
- java - java:我可以对具有相同长度的字符串类型数进行排序吗
- firebase - 我无法在 Firebase 中创建项目?
- spring-boot - 将通用逻辑应用于每个请求
- reactjs - 模块构建失败(来自 ./node_modules/mini-css-extract-plugin/dist/loader.js):
- logic - 从相同的球中找出有缺陷的球