我有以下的熊猫数据帧:如何计算两个Pandas数据框列之间的一致性?
t = pd.DataFrame({"u": ["S1", "S1", "S1", "S2", "S2", "S2", "S5", "S5", "S5"],
"v": ["a", "b", "a", "a", "b", "b", "b", "a", "a"],
"w": ["x", "z", "x", "x", "y", "y", "z", "x", "y"]})
我想计算列v
和w
(类似的分类准确度)之间的协议,由u
列分组。然而,列v
中的值a
和b
对应于列w
(值z
不对应于任何值)中的值x
和y
。因此,我不能简单地比较这两列。
我做的是我在v
列手动设置值,并w
到0
(a
和x
),1
(b
和y
),和2
(z
):
t.loc[t["v"] == "a", "v"] = 0
t.loc[t["v"] == "b", "v"] = 1
t.loc[t["w"] == "x", "w"] = 0
t.loc[t["w"] == "y", "w"] = 1
t.loc[t["w"] == "z", "w"] = 2
现在我可以比较两列,按列u
分组,如下所示:
t.groupby("u").agg(lambda x: np.mean(x["v"] == x["w"]))
这给了我想要的结果,但我想知道是否有更简单的方法来实现相同的目的。
而且,我的解决方案不一样,如果我想计算np.corrcoef
而不是np.mean
工作,即
t.groupby("u").agg(lambda x: np.corrcoef(x["v"], x["w"]))
给我一个错误。
谢谢!你是对的,相关系数并不适合这种类型的问题(分类准确性可能是一个更好的方法,因为我想评估两个变量之间的一致性水平)。在相关说明中,我想知道是否可以通过在Pandas中使用新的因子类型以某种方式避免我的字符串/数字转换。 – cbrnr
@ cle1109我不知道新的因子类型是什么。你是指分类变量吗? – JohnE
是的,我指的是分类变量。我认为如果我分配了'a'和'x'级别0,'b'和'y'级别1(和'z'级别2)将字符串重新编码为数字是没有必要的。无论如何,我对建议的解决方案感到满意:-)。 – cbrnr