我的Y

       AdoptionSpeed
0                  2
1                  0
2                  3
3                  2
4                  2
5                  2
6                  1
7                  3
8                  1
9                  4
...              ...
14987              0
14988              2
14989              4
14990              3
14991              4
14992              3

[14993 rows x 1 columns]

我想把它变成。。。
        0   1   2   3
0       1   1   0   0
1       0   0   0   0
2       1   1   1   0
....
14991   1   1   1   1

所以基本上所有带有2的条目都变成[1 1 0 0]等等。

最佳答案

和我以前的解决方案一样

pd.DataFrame([np.ones(x) for x in df['AdoptionSpeed']]).fillna(0).astype(int)
Out[70]:
   0  1  2  3
0  1  1  0  0
1  0  0  0  0
2  1  1  1  0
3  1  1  0  0
4  1  1  0  0
5  1  1  0  0
6  1  0  0  0
7  1  1  1  0
8  1  0  0  0
9  1  1  1  1

或者更像numpy广播:应该比for循环快
x=df.AdoptionSpeed.max()
pd.DataFrame((df.AdoptionSpeed.values[:,None]>np.arange(x)).astype(int))
Out[81]:
   0  1  2  3
0  1  1  0  0
1  0  0  0  0
2  1  1  1  0
3  1  1  0  0
4  1  1  0  0
5  1  1  0  0
6  1  0  0  0
7  1  1  1  0
8  1  0  0  0
9  1  1  1  1

关于python - 如何将Pandas DataFrame转换为数组表示形式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54951632/

10-16 17:29