python - 数据框分层索引加速

标签 python pandas dataframe

我有这样的数据框

+----+------------+------------+------------+
|    |            |    type    | payment    | 
+----+------------+------------+------------+
| id | res_number |            |            | 
+----+------------+------------+------------+
|  a |     1      |    toys    | 20000      |
|    |     2      |  clothing  | 30000      |
|    |     3      |    food    | 40000      |
|  b |     4      |    food    | 40000      |
|    |     5      |   laptop   | 30000      |
+----+------------+------------+------------+

如您所见,id、res_number 是分层行值,type、payment 是普通列值。我想要得到的是下面。

array([['toys', 20000],
   ['clothing', 30000],
   ['food', 40000]])

无论 'res_number' 出现什么,它都由 'id(=a)' 索引,我知道这一点

df.loc[['a']].values

非常适合它。但是索引速度太慢了……我要索引150000个值。

所以我通过

索引数据框
df.iloc[1].values

但它只带来了

array(['toys', 20000])

有没有索引层次结构更快的索引方法?

最佳答案

选项 1
pd.DataFrame.xs

df.xs('a').values

选项 2
pd.DataFrame.loc

df.loc['a'].values

选项 3
pd.DataFrame.query

df.query('ilevel_0 == \'a\'').values

选项 4
更迂回一点,使用 pd.MultiIndex.get_level_values 创建掩码:

df[df.index.get_level_values(0) == 'a'].values

array([['toys', 20000],
       ['clothing', 30000],
       ['food', 40000]], dtype=object)

关于python - 数据框分层索引加速,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49103516/

相关文章:

python - Gurobi python 改变定义值的值

python - 数据帧行的快速笛卡尔求和

python - 使用高斯混合的异常值检测

python - 为什么 00100 = 64 在 python 中?

python - memcached 可以有效处理多大的数据?

python - 将长日期时间转换为日期 (dd/mm/yyyy)

python - Python 中缺少数据点

python - Pandas df.mode 列中每个单元格具有多个值

python - 根据其他两列的相等性创建新列

python - 按条件替换 pandas 数据框列中的值