只为panda中的某个多索引创建具有值的列

  • 本文关键字:创建 索引 panda 只为 pandas
  • 更新时间 :
  • 英文 :


我有一个这样的数据帧:

df = pd.DataFrame(np.random.randint(50, size=(4, 4),
index=[['a', 'a', 'b', 'b'], [800, 900, 800, 900]],
columns=['X', 'Y', 'r_value', 'z_value'])
df.index.names = ["dat", "recor"]
X     Y   r_value    z_value   
dat       recor                                                                             
a           800     14    28       12         18 
900     47    34       59         49       
b           800     33    18       24         33
900     18    25       44         19 
...

我想应用一个函数来创建一个基于r_value的新列,该列只在recor==900的情况下提供值,所以,最后我想要这样的东西:

X     Y   r_value    z_value    BB 
dat       recor                                                                             
a           800     14    28       12         18   NaN
900     47    34       59         49     0   
b           800     33    18       24         33   NaN
900     18    25       44         19     2
...

我创建了这样的功能:

x = df.loc[pd.IndexSlice[:,900], "r_value"]
conditions = [x >=70, np.logical_and(x >= 40, x < 70), 
np.logical_and(x >= 10, x < 40), x <10]
choices = [0, 1, 2, 3]
BB = np.select(conditions, choices)

因此,现在我需要将BB附加为一列,用NaN填充与recor==800对应的行。我该怎么做?我尝试了几个想法(这里没有评论(,但没有结果。Thx。

尝试

df.loc[df.index.get_level_values('recor')==900, 'BB'] = BB

部分df.index.get_level_values('recor')==900创建一个True的布尔数组,其中索引级别"recor"等于900

使用不存在的列进行索引,即"BB"创建新列。

该列的其余部分应自动填充NaN

我不能测试它,因为你没有包括一个最小的可复制的例子。

最新更新