首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于两个值之间的索引填充pandas数据帧

基于两个值之间的索引填充pandas数据帧
EN

Stack Overflow用户
提问于 2017-06-26 15:15:05
回答 1查看 5.3K关注 0票数 4

我正在尝试生成一个掩码,用于广播到dataframe:一个指示给定行是否在两个值之间的布尔值序列。对于单个逻辑语句,例如数据帧中的最后五个元素,这很容易做到:

代码语言:javascript
运行
复制
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(10,1))
mask = (df.index.values>4)
df.loc[mask,'column'] = range(0,5)

但是如何用更多的交叉性语句做同样的事情呢?例如,我可以寻址第2行到第6行,而不是数组中的最后五个组件吗?尝试对掩码使用AND语句失败,并且我不能在数据帧索引值上使用Between。

EN

回答 1

Stack Overflow用户

发布于 2017-06-26 15:22:13

我认为如果索引值重复,您可以主要使用mask

因此,如果只想使用between来处理系列,可以使用to_seriesSeries构造函数。

代码语言:javascript
运行
复制
mask = df.index.to_series().between(2,6)
#mask = pd.Series(df.index, index=df.index).between(2,6)
print (mask)
0    False
1    False
2     True
3     True
4     True
5     True
6     True
7    False
8    False
9    False
dtype: bool

mask = df.index.to_series().between(2,6).values
print (mask)
[False False  True  True  True  True  True False False False]

或使用&的链式条件

代码语言:javascript
运行
复制
mask = (df.index >= 2) & (df.index <= 6)
print (mask)
[False False  True  True  True  True  True False False False]

但如果使用唯一单调索引,则使用loc可能更好:

代码语言:javascript
运行
复制
df.loc[2:6, 0] = range(5)
print (df)
          0
0  0.642933
1  0.912846
2  0.000000
3  1.000000
4  2.000000
5  3.000000
6  4.000000
7  0.504830
8  0.000422
9  0.029358
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44754647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档