CAB*_*CAB 4 python between dataframe pandas
我正在尝试生成一个用于广播到数据帧中的掩码:一个布尔系列,指示给定的行是否位于两个值之间。对于单个逻辑语句来说,这很容易做到,例如数据框中的最后五个元素:
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)
Run Code Online (Sandbox Code Playgroud)
但如何用更多的交叉陈述来做同样的事情呢?例如,我可以寻址第 2 行到第 6 行,而不是数组中的最后五个组件吗?尝试对掩码使用 AND 语句失败,并且我无法在数据帧索引值上使用 Between 。
我认为您可以主要使用mask重复的索引值。
因此,如果between只想使用系列,可以使用to_series或Series构造函数。
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]
Run Code Online (Sandbox Code Playgroud)
或者使用以下链接条件&:
mask = (df.index >= 2) & (df.index <= 6)
print (mask)
[False False True True True True True False False False]
Run Code Online (Sandbox Code Playgroud)
但也许更好的是使用loc唯一的单调索引:
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
Run Code Online (Sandbox Code Playgroud)