我有这样一个数据帧:

idx Var1 Var2 Var3
0 True False False
1 False True False
2 True False True
3 False False False
4 True False True

我想创建三个新列,其中距离(每行)最接近True,如果该行有True show 0,那么我将得到以下结果:

idx Var1 Var2 Var3 distV1 distV2 distV3
0 True False False 0 1 2
1 False True False 1 0 1
2 True False True 0 1 0
3 False False False 1 2 1
4 True False True 0 3 0

我已经阅读了与这个话题相关的所有其他讨论,但没有找到类似问题的答案.

推荐答案

以下是numpy ops的一种方法:

for c in df:
    r = np.where(df[c])[0]
    d = abs(df.index.values[:, None] - r)
    df[f'{c}_dist'] = abs(df.index - r[d.argmin(1)])

print(df)

    Var1   Var2   Var3  Var1_dist  Var2_dist  Var3_dist
0   True  False  False          0          1          2
1  False   True  False          1          0          1
2   True  False   True          0          1          0
3  False  False  False          1          2          1
4   True  False   True          0          3          0

Python相关问答推荐

Pandas 在最近的日期合并,考虑到破产

如何将双框框列中的成对变成两个新列

为什么以这种方式调用pd.ExcelWriter会创建无效的文件格式或扩展名?

在Python中动态计算范围

多指标不同顺序串联大Pandas 模型

使用BeautifulSoup抓取所有链接

网格基于1.Y轴与2.x轴显示在matplotlib中

为什么'if x is None:pass'比'x is None'单独使用更快?

Python避免mypy在相互引用中从另一个类重定义类时失败

如何在Python中使用Iscolc迭代器实现观察者模式?

在numpy数组中寻找楼梯状 struct

如果有2个或3个,则从pandas列中删除空格

GPT python SDK引入了大量开销/错误超时

多个矩阵的张量积

如何在Python中自动创建数字文件夹和正在进行的文件夹?

来自Airflow Connection的额外参数

当我定义一个继承的类时,我可以避免使用`metaclass=`吗?

如何从数据框列中提取特定部分并将该值填充到其他列中?

查找查找表中存在的列值组合

如何在不不断遇到ChromeDriver版本错误的情况下使用Selify?