熊猫的:来自pd.crosstab()的矩阵

时间:2019-03-16 21:46:01

标签: python pandas

我正在逐步学习熊猫,我发现pd.crosstab()可以使人惊奇,但在这种情况下我很难使它起作用。

我有一个标有int的对象obj的列表,我希望对象矩阵共享相同的标签(如果相同,则为1,否则为0)

| obj | tag |
|-----|-----|
| a   | 0   |
| b   | 2   |
| c   | 1   |
| ... | ... |
| z   | 2   |

->

|     | a | b | c | ... | z |
|-----|---|---|---|-----|---|
| a   | 1 | 0 | 0 | .   | 0 |
| b   | 0 | 1 | 0 | .   | 1 |
| c   | 0 | 0 | 1 | .   | 0 |
| ... | . | . | . | .   | 0 |
| z   | 0 | 1 | 0 | 0   | 1 |

有一些for中等方法可以做到,还有熊猫友好型吗?

PS:尝试过pd.crosstab(df.obj, df.obj, values=df.tag, aggfunc=[np.sum]),但NaN已填满。

1 个答案:

答案 0 :(得分:0)

您可以将mergecrosstabDataFrame.rename_axis结合使用:

df = df.merge(df, on='tag')
df = pd.crosstab(df.obj_x, df.obj_y).rename_axis(None).rename_axis(None, axis=1)
print (df)
   a  b  c  z
a  1  0  0  0
b  0  1  0  1
c  0  0  1  0
z  0  1  0  1