Python 如何透视数据帧,使跨多个列的唯一值成为新列?
我有一个如下形式的数据框: dfPython 如何透视数据帧,使跨多个列的唯一值成为新列?,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_
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答案解决了你的问题