Python 如何透视数据帧,使跨多个列的唯一值成为新列?

Python 如何透视数据帧,使跨多个列的唯一值成为新列?,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我有一个如下形式的数据框: df col_1 col_2 col_3 col_4 ID 1 A B C A 2 B D 3 A C B df = pd.DataFrame({'col_1':['A','B','A'], 'col_2':['B','D','C'], 'col_3':['C',np.NaN,'B'], 'col_

我有一个如下形式的数据框:

df

    col_1      col_2      col_3      col_4
ID
1     A          B          C          A
2     B          D
3     A          C          B

df = pd.DataFrame({'col_1':['A','B','A'], 'col_2':['B','D','C'], 'col_3':['C',np.NaN,'B'], 'col_4':['A', np.NaN, np.NaN]}, index=[1,2,3])
      A      B      C      D
ID
1     2      1      1      0
2     1      0      0      1
3     1      1      1      0
请注意,跨列重复的值不是偶然的-它们引用相同的实体(例如,列1中的A与列4中的A相同)。我正在尝试透视这个数据帧的值,以便这些唯一的值成为新的列。例如,df将变成:

新的_df

    col_1      col_2      col_3      col_4
ID
1     A          B          C          A
2     B          D
3     A          C          B

df = pd.DataFrame({'col_1':['A','B','A'], 'col_2':['B','D','C'], 'col_3':['C',np.NaN,'B'], 'col_4':['A', np.NaN, np.NaN]}, index=[1,2,3])
      A      B      C      D
ID
1     2      1      1      0
2     1      0      0      1
3     1      1      1      0

新值表示计数。我试过了,但它没有给我想要的。实现这一点最直观的方法是什么?

IIUC使用
堆栈
str.get\u假人

df.stack().loc[lambda x : x!=''].str.get_dummies().sum(level=0)
    A  B  C  D
ID            
1   2  1  1  0
2   0  1  0  1
3   1  1  1  0

你能添加代码来创建dataframe@DanielMesejo完成!我相信@W-B答案解决了你的问题