Pandas - 将多个分类列转换为同一组列
Pandas - pivot multiple categorical columns into same set of columns
我有一个数据框如下:
import pandas as pd
data = {
'Num' : ['1','2', '3','4','5','6','7'],
'col1': ['val1', 'val6', 'val3', 'val7', 'val2','val4','val5'],
'col2': ['','val3','val5','','','',''],
'col3': ['','val1','val2','','','','']
}
df = pd.DataFrame(data)
df["myvals"]=1
Num col1 col2 col3 myvals
0 1 val1 1
1 2 val6 val3 val1 1
2 3 val3 val5 val2 1
3 4 val7 1
4 5 val2 1
5 6 val4 1
6 7 val5 1
我正在尝试将 'col1'、'col2' 和 'col3' 中的值转换为同一组 'pivoted columns' 但到目前为止,我只能从 'col1':
中获取值
pd.pivot_table(df, values="myvals", index=["Num"], columns="col1", fill_value=0)
col1 val1 val2 val3 val4 val5 val6 val7
Num
1 1 0 0 0 0 0 0
2 0 0 0 0 0 1 0
3 0 0 1 0 0 0 0
4 0 0 0 0 0 0 1
5 0 1 0 0 0 0 0
6 0 0 0 1 0 0 0
7 0 0 0 0 1 0 0
关于如何同时引入 'col2' 和 'col3' 的值的任何想法,如下所示 'Num' = 2 和 'Num' = 3 的行应该有多个 1?
col1 val1 val2 val3 val4 val5 val6 val7
Num
1 1 0 0 0 0 0 0
2 1 0 1 0 0 1 0
3 0 1 1 0 1 0 0
4 0 0 0 0 0 0 1
5 0 1 0 0 0 0 0
6 0 0 0 1 0 0 0
7 0 0 0 0 1 0 0
这更像是一个 get_dummies
问题
df.replace('',np.nan).set_index('Num').stack().str.get_dummies().sum(level=0)
Out[1125]:
val1 val2 val3 val4 val5 val6 val7
Num
1 1 0 0 0 0 0 0
2 1 0 1 0 0 1 0
3 0 1 1 0 1 0 0
4 0 0 0 0 0 0 1
5 0 1 0 0 0 0 0
6 0 0 0 1 0 0 0
7 0 0 0 0 1 0 0
我有一个数据框如下:
import pandas as pd
data = {
'Num' : ['1','2', '3','4','5','6','7'],
'col1': ['val1', 'val6', 'val3', 'val7', 'val2','val4','val5'],
'col2': ['','val3','val5','','','',''],
'col3': ['','val1','val2','','','','']
}
df = pd.DataFrame(data)
df["myvals"]=1
Num col1 col2 col3 myvals
0 1 val1 1
1 2 val6 val3 val1 1
2 3 val3 val5 val2 1
3 4 val7 1
4 5 val2 1
5 6 val4 1
6 7 val5 1
我正在尝试将 'col1'、'col2' 和 'col3' 中的值转换为同一组 'pivoted columns' 但到目前为止,我只能从 'col1':
中获取值pd.pivot_table(df, values="myvals", index=["Num"], columns="col1", fill_value=0)
col1 val1 val2 val3 val4 val5 val6 val7
Num
1 1 0 0 0 0 0 0
2 0 0 0 0 0 1 0
3 0 0 1 0 0 0 0
4 0 0 0 0 0 0 1
5 0 1 0 0 0 0 0
6 0 0 0 1 0 0 0
7 0 0 0 0 1 0 0
关于如何同时引入 'col2' 和 'col3' 的值的任何想法,如下所示 'Num' = 2 和 'Num' = 3 的行应该有多个 1?
col1 val1 val2 val3 val4 val5 val6 val7
Num
1 1 0 0 0 0 0 0
2 1 0 1 0 0 1 0
3 0 1 1 0 1 0 0
4 0 0 0 0 0 0 1
5 0 1 0 0 0 0 0
6 0 0 0 1 0 0 0
7 0 0 0 0 1 0 0
这更像是一个 get_dummies
问题
df.replace('',np.nan).set_index('Num').stack().str.get_dummies().sum(level=0)
Out[1125]:
val1 val2 val3 val4 val5 val6 val7
Num
1 1 0 0 0 0 0 0
2 1 0 1 0 0 1 0
3 0 1 1 0 1 0 0
4 0 0 0 0 0 0 1
5 0 1 0 0 0 0 0
6 0 0 0 1 0 0 0
7 0 0 0 0 1 0 0