You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何简化获取指定Ticker与财年的DataFrame单元格值的表达式?

简化Pandas数据查询表达式的方法

目标DataFrame

df
                    SimFinId Currency  Fiscal Year  ... Net Extraordinary Gains (Losses)  Net Income Net Income (Common)
Ticker Report Date                                  ...                                                                 
A      2018-10-31      45846      USD         2018  ...                              NaN   316000000           316000000
       2019-10-31      45846      USD         2019  ...                              NaN  1071000000          1071000000
       2020-10-31      45846      USD         2020  ...                              NaN   719000000           719000000
       2021-10-31      45846      USD         2021  ...                              NaN  1210000000          1210000000
       2022-10-31      45846      USD         2022  ...                              NaN  1254000000          1254000000
...                      ...      ...          ...  ...                              ...         ...                 ...
ZYXI   2018-12-31     171401      USD         2018  ...                              NaN     9552000             9552000
       2019-12-31     171401      USD         2019  ...                              NaN     9492000             9492000
       2020-12-31     171401      USD         2020  ...                              NaN     9074000             9074000
       2021-12-31     171401      USD         2021  ...                              NaN    17103000            17103000
       2022-12-31     171401      USD         2022  ...                              NaN    17048000            17048000

需求与原表达式

需求:获取Ticker为A、Fiscal Year为2019的Net Income (Common)单元格值。

原使用表达式:

df[df['Fiscal Year'] == 2019].loc['A','Net Income (Common)'].values[0]
1071000000

简化方案

以下是几种更简洁清晰的写法,均能得到结果1071000000:

方案一:先定位Ticker子集,再筛选年份取值

利用多级索引特性先缩小数据范围,再通过直观方式定位目标值:

# query语法更贴近自然语言
df.loc['A'].query("`Fiscal Year` == 2019")['Net Income (Common)'].iloc[0]

# 或用布尔索引
df.loc['A'][df.loc['A']['Fiscal Year'] == 2019]['Net Income (Common)'].iloc[0]

方案二:直接用query多条件查询

通过query一次性组合两个筛选条件,列名含空格时用反引号包裹:

df.query("Ticker == 'A' and `Fiscal Year` == 2019")['Net Income (Common)'].iloc[0]

方案三:结合loc与索引层级筛选

通过索引层级获取Ticker条件,配合Fiscal Year的布尔索引完成查询:

df.loc[df.index.get_level_values('Ticker') == 'A', 'Net Income (Common)'][df['Fiscal Year'] == 2019].iloc[0]

其中方案一和方案二的可读性最优,推荐优先使用。

内容的提问来源于stack exchange,提问作者showkey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 01:43:11