按pandas中的列名重新分类

tri*_*ook 1 python pandas numpy-broadcasting

我想将测试应用于pandas数据帧,并根据测试结果在相应的数据帧中创建标记.我到目前为止:

import numpy as np
import pandas as pd


matrix = pd.DataFrame({'a': [1, 11, 2, 3, 4], 'b': [5, 6, 22, 8, 9]})
flags = pd.DataFrame(np.zeros(matrix.shape), columns=matrix.columns)
flag_values = pd.Series({"a": 100, "b": 200})

flags[matrix > 10] = flag_values 
Run Code Online (Sandbox Code Playgroud)

但这会引发错误

ValueError: Must specify axis=0 or 1
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我在哪里可以指定轴?有没有更好的方法来实现这一目标?

编辑:

我在这个例子中寻找"标志"的结果是

a    b
0    0
100  0
0    200
0    0
0    0
Run Code Online (Sandbox Code Playgroud)

unu*_*tbu 5

你可以定义flags = (matrix > 10) * flag_values:

In [35]: (matrix > 10) * flag_values
Out[35]: 
     a    b
0    0    0
1  100    0
2    0  200
3    0    0
4    0    0
Run Code Online (Sandbox Code Playgroud)

这依赖于具有数值1的True和具有数值0的False.它还依赖于Pandas 在执行算术运算之前基于标签的DataFrames(和Series)的漂亮自动对齐.