我想在Pandas数据框中添加一列,并根据索引级别0和1设置值.例如,对于级别0为hom、列delta大于0的索引,将该值设置为buy.对于级别0为hom、列delta小于0的索引,将值设置为sell.对于级别0的不同值,还有其他规则.

我该怎么做?

>df
         delta
fut ABC  15284.233222
pos DEF  0.248976
    POL  0.002041
    ABC  0.043585
hom YTY  0.054100
    MNN -0.356873

这是所需的输出:

>df
         delta    new_col
fut ABC  15284.23 nan
pos DEF  0.248976 nan
    POL  0.002041 nan
    ABC  0.043585 nan
hom YTY  0.054100 buy
    MNN -0.356873 sell

我可以用loc过滤数据框,以确定如何创建新列.

df.loc[df.index.get_level_values(level=0) == 'hom'] > 0

         delta    new_col
hom YTY  0.054100 True
    MNN -0.356873 False

推荐答案

不需要做任何布尔掩蔽,因为你的数据已经有了一个可用的索引!

import pandas as pd
import numpy as np

df.loc['hom', 'new_col'] = np.where(df.loc['hom', 'delta'] > 0, 'buy', 'sell')

print(df)
                delta new_col
fut ABC  15284.233222     NaN
pos DEF      0.248976     NaN
    POL      0.002041     NaN
    ABC      0.043585     NaN
hom YTY      0.054100     buy
    MNN     -0.356873    sell

Python相关问答推荐

C#使用程序从Python中执行Exec文件

如何从在虚拟Python环境中运行的脚本中运行需要宿主Python环境的Shell脚本?

Python,Fitting into a System of Equations

如何获取numpy数组的特定索引值?

对象的`__call__`方法的setattr在Python中不起作用'

梯度下降:简化要素集的运行时间比原始要素集长

Pandas DataFrame中行之间的差异

为什么NumPy的向量化计算在将向量存储为类属性时较慢?'

调用decorator返回原始函数的输出

Python—转换日期:价目表到新行

通过追加列表以极向聚合

如何合并具有相同元素的 torch 矩阵的行?

从列表中分离数据的最佳方式

与同步和异步客户端兼容的Python函数

Scipy.linprog的可行性有问题吗?(A_ub@x0<;=b_ub).all()为True-但是-linprog(np.zeros_like(X0),A_ub=A_ub,b_ub=b_ub)不可行

有什么方法可以在不对多索引DataFrame的列进行排序的情况下避免词法排序警告吗?

如何计算Pandas 中具有特定条件的行之间的天差

跨两个数据帧收集非索引列上的公共组

Select 满足特定条件的连续元素作为单独的数组

给定Pandas 列DataFrame中的一个值,在其他DataFrame中 Select 与该值最接近的N行