首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >带有重复值的Python多索引切片

带有重复值的Python多索引切片
EN

Stack Overflow用户
提问于 2020-10-28 08:53:40
回答 2查看 53关注 0票数 0

我有一个问题,切片数据与熊猫多索引与重复。

假设我有一张桌子(A和B是被告)

代码语言:javascript
运行
AI代码解释
复制
A B C
1 1 11
1 2 12
1 3 13
2 1 21
2 2 22
2 3 23

and so on

And to vectors
a = [1, 2, 3, 1, 2, 1, 2 ]
b = [3, 2, 1, 3, 2, 1, 3 ]

我想用一种方式将表切片,以返回向量c,其值与向量a和b中的指示数一致。

代码语言:javascript
运行
AI代码解释
复制
c = [13, 22, 31, 13, 22, 11, 23] 

我脑子里唯一想到的就是转动这张桌子,然后得到:

代码语言:javascript
运行
AI代码解释
复制
A B1 B2 B3
1 11 12 13
2 21 22 23
3 31 32 33

将一个索引应用于A列,通过loc获得正确的行,然后用指示矩阵对每一行进行适当的列选择,并用累积和得到向量(用另一个切片)。我确信一定有更简单的方法去做,但我找不到合适的方法去做

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-28 09:05:00

您可以通过使用ab数组来创建一个新的MultiIndex,然后使用reindex来实现这一点:

样本数据

代码语言:javascript
运行
AI代码解释
复制
import pandas as pd

index = pd.MultiIndex.from_product([[1,2,3], [1,2,3]])
df = pd.DataFrame({"C": [11, 12, 13, 21, 22, 23, 31, 32, 33]}, index=index)

print(df) # dataframe with 2-level index and 1 column "C"
      C
1 1  11
  2  12
  3  13
2 1  21
  2  22
  3  23
3 1  31
  2  32
  3  33

方法

  • ab数组(
  • )创建新的MultiIndex,将数据(或仅仅是感兴趣的列)对齐到这个新的索引

代码语言:javascript
运行
AI代码解释
复制
a = [1, 2, 3, 1, 2, 1, 2 ]
b = [3, 2, 1, 3, 2, 1, 3 ]

new_index = pd.MultiIndex.from_arrays([a, b])
new_c = df["C"].reindex(new_index)

print(new_c.to_numpy())
[13 22 31 13 22 11 23]

方法2

您还可以将ab数组压缩到一起,只需使用.loc对数据进行切片:

代码语言:javascript
运行
AI代码解释
复制
# Select the rows specified by combinations of a, b; in column "C"
new_c = df.loc[zip(a, b), "C"]

print(new_c.to_numpy())
[13 22 31 13 22 11 23]
票数 3
EN

Stack Overflow用户

发布于 2020-10-28 09:37:53

一个选项是merge

代码语言:javascript
运行
AI代码解释
复制
 pd.DataFrame({'A':a,'B':b}).merge(df, on=['A','B'], how='left')['C']

输出(注意,NaN值对应于df中数据不可用的地方):

代码语言:javascript
运行
AI代码解释
复制
0    13.0
1    22.0
2     NaN
3    13.0
4    22.0
5    11.0
6    23.0
Name: C, dtype: float64
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64577660

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文