我正在逐步学习熊猫,我发现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已填满。
答案 0 :(得分:0)
您可以将merge
与crosstab
和DataFrame.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