在python中创建混淆矩阵

2024-03-19 07:28:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中创建混乱矩阵时遇到问题。我目前有以下csv文件,其中有一个表,按如下所示分为两列:

----------
Letter | Code

A   |        ["13.45", "16.59", "12.28"] 

B   |        ["13.45", "18.20"]

C   |        ["13.45", "18.20", "19.30"]

我的目标是生成3个额外的列,标题为AB和{},其中它们与其他列的交集是列字母与该行字母共有的代码百分比。例如,对于"A"列,将是:

^{2}$

对于列B

1/2

1

1

等等。我不知道这是否可能与熊猫或其他包裹,但如果有人可以帮助我,我将非常高兴。请理解,我对python的理解力很低(很抱歉我的问题格式很糟糕)。谢谢您!在


Tags: 文件csv代码标题目标格式字母code
1条回答
网友
1楼 · 发布于 2024-03-19 07:28:42

您可以使用applysetintersection

对于单个列

In [607]: A = df.query('letter == "A"').code.item()

In [608]: df.code.apply(lambda x: len(set(x).intersection(A))) / len(A)
Out[608]:
0    1.000000
1    0.333333
2    0.333333
Name: code, dtype: float64

In [609]: B = df.query('letter == "B"').code.item()

In [610]: df.code.apply(lambda x: len(set(x).intersection(B))) / len(B)
Out[610]:
0    0.5
1    1.0
2    1.0
Name: code, dtype: float64

In [611]: A
Out[611]: ['13.45', '16.59', '12.28']

In [612]: B
Out[612]: ['13.45', '18.20']

如果你想一次把所有的行

^{pr2}$

连接到原始数据帧

In [629]: pd.DataFrame(
          {r['letter'] : df.code.apply(lambda x: 
           len(set(x).intersection(r['code']))) / len(r['code']) 
           for i, r in df.iterrows()}).join(df)
Out[629]:
          A    B         C letter                   code
0  1.000000  0.5  0.333333      A  [13.45, 16.59, 12.28]
1  0.333333  1.0  0.666667      B         [13.45, 18.20]
2  0.333333  1.0  1.000000      C  [13.45, 18.20, 19.30]

相关问题 更多 >