在 pandas 中按列名重新分类
Reclassification by column name in pandas
我想对 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
但这会引发错误
ValueError: Must specify axis=0 or 1
在这种情况下,我在哪里可以指定轴?有没有更好的方法来完成这个?
编辑:
我在此示例中为 "flags" 寻找的结果是
a b
0 0
100 0
0 200
0 0
0 0
mask
与 mul
flags.mask(matrix > 10,1).mul(flag_values,axis=1)
Out[566]:
a b
0 0.0 0.0
1 100.0 0.0
2 0.0 200.0
3 0.0 0.0
4 0.0 0.0
您可以定义 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
这依赖于 True having numeric value 1 和 False 的数值为 0。
在执行算术运算之前,它还依赖于 Pandas' 漂亮的 automatic alignment 基于标签的数据帧(和系列)。
我想对 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
但这会引发错误
ValueError: Must specify axis=0 or 1
在这种情况下,我在哪里可以指定轴?有没有更好的方法来完成这个?
编辑:
我在此示例中为 "flags" 寻找的结果是
a b
0 0
100 0
0 200
0 0
0 0
mask
与 mul
flags.mask(matrix > 10,1).mul(flag_values,axis=1)
Out[566]:
a b
0 0.0 0.0
1 100.0 0.0
2 0.0 200.0
3 0.0 0.0
4 0.0 0.0
您可以定义 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
这依赖于 True having numeric value 1 和 False 的数值为 0。 在执行算术运算之前,它还依赖于 Pandas' 漂亮的 automatic alignment 基于标签的数据帧(和系列)。