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)
我该怎么做呢?我已经尝试了许多不同类型的循环,但仍然没有完全理解。
您可以使用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)
| 归档时间: |
|
| 查看次数: |
364 次 |
| 最近记录: |