使用 pandas dataframe 将一系列配对值转换为 (0,1) 矩阵

use*_*181 3 python dataframe pandas

我有 2 个数字系列:A = (24,25,26,27,28,29) 和 B = (105,106,107,108,109)。一个包含两列 A 和 B 的 DataFrame,例如:

import numpy as np
import pandas as pd

A = pd.Series(np.array([24, 25, 26, 27, 28, 29]))
B = pd.Series(np.array([105, 106, 107, 108, 109]))

AB_dataframe = pd.DataFrame({
    'A': [25, 25, 25, 26, 26, 27, 27, 28, 29],
    'B': [106, 108, 109, 108, 109, 106, 108, 108, 107]
})
Run Code Online (Sandbox Code Playgroud)

AB_dataframe:

    A    B
0  25  106
1  25  108
2  25  109
3  26  108
4  26  109
5  27  106
6  27  108
7  28  108
8  29  107
Run Code Online (Sandbox Code Playgroud)

我想将它们重写为这样的 DataFrame:

    105  106  107  108  109
24    0    0    0    0    0
25    0    1    0    1    1
26    0    0    0    1    1
27    0    1    0    1    0
28    0    0    0    1    0
29    0    0    1    0    0
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?我已经尝试了许多不同类型的循环,但仍然没有完全理解。

Qua*_*ang 6

您可以使用crosstab获取虚拟变量,然后reindex获取正确的索引/列:

out = (pd.crosstab(AB_dataframe['A'], AB_dataframe['B'])
         .reindex(index=A, columns=B, fill_value=0)
      )
Run Code Online (Sandbox Code Playgroud)

输出:

    105  106  107  108  109
24    0    0    0    0    0
25    0    1    0    1    1
26    0    0    0    1    1
27    0    1    0    1    0
28    0    0    0    1    0
29    0    0    1    0    0
Run Code Online (Sandbox Code Playgroud)